Test instructions: N points, M-bars, two-point colors for each side of the connection are different,
Ideas:
#include <cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>using namespacestd;intT,n,m;vector<int>g[500010];intvis[500010];intcnt1,cnt2,sum;intDfsintx) { inti,j,k; for(i=0; I<g[x].size (); i++) {k=G[x][i]; if(vis[x]==Vis[k]) { return 0; } if(vis[k]==-1) {Vis[k]=1-Vis[x]; if(Vis[k]) cnt2++; Elsecnt1++; if(!Dfs (k))return 0; } } return 1;}voidsolve () {inti,j,k; Sum=0; memset (Vis,-1,sizeof(VIS)); if(n<2) {printf ("Poor wyh\n"); return; } if(m==0) {printf ("%d%d\n", N-1,1); return; } for(i=1; i<=n;i++) {Cnt1=0; cnt2=0; if(vis[i]==-1) {Vis[i]=0; Cnt1++; if(!DFS (i)) {printf ("Poor wyh\n"); return; } Sum+=Max (CNT1,CNT2); }} printf ("%d%d\n", sum,n-sum);}intMain () {inti,j,k,u,v; scanf ("%d",&t); while(t--) {scanf ("%d%d",&n,&m); Memset (g,0,sizeof(g)); for(i=0; i<m;i++) {scanf ("%d%d",&u,&v); G[u].push_back (v); G[v].push_back (U); } solve (); } return 0;}
Hdu 5258 wyh2000 and Pupil (Dfs) (to be continued)