Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define mx 100009
- #define ll long long int
- vector<ll>v[mx];
- ll n,m,cr,cl;
- bool vis[mx];
- ll ans[mx];
- ll res=0;
- ll dfs(int s)
- {
- vis[s]=true;
- for(ll i=0;i<v[s].size();i++){
- if(vis[v[s][i]]==false){
- ans[v[s][i]]=min(ans[s]+cr,ans[s]+cl);
- ans[s]=ans[v[s][i]];
- res=max(res,ans[v[s][i]]);
- vis[v[s][i]]=true;
- dfs(v[s][i]);
- }
- }
- return res;
- }
- int main()
- {
- ll q;
- cin>>q;
- while(q--){
- memset(vis,false,sizeof(vis));
- memset(v,0,sizeof(v));
- memset(ans,0,sizeof(ans));
- cin>>n>>m>>cl>>cr;
- for(int i=0;i<m;i++){
- ll a,b;
- cin>>a>>b;
- v[a].push_back(b);
- v[b].push_back(a);
- }
- ll ppp=0;
- for(int i=1;i<=n;i++){
- if(vis[i]==false){
- ans[i]=cl;
- res=ans[i];
- ppp+=dfs(i);
- }
- }
- cout<<ppp<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement