Lets put a node is vampire, then all the nodes adjacent with it will be lykans.
Thats why we just need to traverse all the node by a simple bfs or dfs, by toggling nodes states( if parents is vampire then it will be lykans)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include<bits/stdc++.h> using namespace std; #define f0(n) for(int i=0;i<n;i++) #define pb push_back #define IOS ios::sync_with_stdio(false); const int maxn=20004; vector<int>adj[maxn]; int vis[maxn]; ///solution void init(){ f0(maxn){ adj[i].clear(); vis[i]=0; } } int bfs(int x){ queue<int>q; int va=0,ly=0; q.push(x); vis[x]=1; va++; while(!q.empty()){ int u=q.front(); q.pop(); for(auto v:adj[u]){ if(vis[v]==0){ if(vis[u]==1){ vis[v]=2; ly++; } else {vis[v]=1;va++;} q.push(v); } } } return max(va,ly); } int tc=0; void solution(){ init(); int n; cin>>n; f0(n){ int u,v; cin>>u>>v; adj[u].pb(v); adj[v].pb(u); } int ans=0; for(int i=1;i<=20000;i++){ if(vis[i]==0 && !adj[i].empty()){ ans+=bfs(i); } } cout << "Case "<<++tc << ": " << ans << endl; } signed main() { IOS int t; t=1; cin>>t; while(t--){ solution(); } return 0; } |
No comments:
Post a Comment
If you have any doubts, let me know through comments