标签:
传送门:A Bug‘s Life
Description
Input
Output
Sample Input
2
3 3
1 2
2 3
1 3
4 2
1 2
3 4
Sample Output
Scenario #1:
Suspicious bugs found!
Scenario #2:
No suspicious bugs found!
Hint
using namespace std; #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<functional> #include<vector> #include<map> #include<queue> #include<climits> #define pq priority_queue #define X first #define Y second #define MP make_pair #define pb push_back #define Read(x) freopen(x, "r", stdin) #define scf(x) scanf(x) #define prf(x) printf(x) #define set_0(x) memset(x, 0, sizeof(x)) #define set_1(x) memset(x, -1, sizeof(x)); #define rep(i, l, r) for(int i=l; i<r; i++) typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vpii; const int MAX_N=2e3+10; int par[MAX_N]; bool rel[MAX_N]; int find(int x){ if(par[x]==x) return x; int tmp=par[x]; par[x]=find(par[x]); if(rel[x]) rel[x]=rel[tmp]; else rel[x]=!rel[tmp]; return par[x]; } void unite(int x, int y){ int yy=find(y), xx=find(x); if(xx==yy) return; par[xx]=yy; if(rel[x]==rel[y]) rel[xx]=false; else rel[xx]=true; } int main(){ //Read("in"); scanf("%*d"); int N, M, a, b, cs=0; bool ok; while(~scanf("%d%d", &N, &M)){ for(int i=1; i<=N; i++){ par[i]=i; rel[i]=true; //i与par[i]是否同性 } ok=true; while(M--){ scanf("%d%d", &a, &b); if(!ok) continue; if(find(a)==find(b)){ if(rel[a]==rel[b]) ok=false; } else unite(a, b); } if(cs) puts(""); printf("Scenario #%d:\n", ++cs); puts(ok?"No suspicious bugs found!":"Suspicious bugs found!"); } return 0; }
AC的姿势:
using namespace std; #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<functional> #include<vector> #include<map> #include<queue> #include<climits> #define pq priority_queue #define X first #define Y second #define MP make_pair #define pb push_back #define Read(x) freopen(x, "r", stdin) #define scf(x) scanf(x) #define prf(x) printf(x) #define set_0(x) memset(x, 0, sizeof(x)) #define set_1(x) memset(x, -1, sizeof(x)); #define rep(i, l, r) for(int i=l; i<r; i++) typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vpii; const int MAX_N=2e3+10; int par[MAX_N]; bool rel[MAX_N]; int find(int x){ if(par[x]==x) return x; int tmp=par[x]; par[x]=find(par[x]); if(rel[x]) rel[x]=rel[tmp]; else rel[x]=!rel[tmp]; return par[x]; } void unite(int x, int y){ int yy=find(y), xx=find(x); if(xx==yy) return; par[xx]=yy; if(rel[x]==rel[y]) rel[xx]=false; else rel[xx]=true; } int main(){ //Read("in"); int N, M, a, b, cs=0, T; bool ok; scanf("%d", &T); while(T--){ scanf("%d%d", &N, &M); for(int i=1; i<=N; i++){ par[i]=i; rel[i]=true; //i与par[i]是否同性 } ok=true; while(M--){ scanf("%d%d", &a, &b); if(!ok) continue; if(find(a)==find(b)){ if(rel[a]==rel[b]) ok=false; } else unite(a, b); } if(cs) puts(""); printf("Scenario #%d:\n", ++cs); puts(ok?"No suspicious bugs found!":"Suspicious bugs found!"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/Patt/p/4538273.html