标签:poj
Time Limit: 10000MS | Memory Limit: 65536K | |
Total Submissions: 29209 | Accepted: 9528 |
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
Source
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=2000010; const int maxn=2010; int col[maxn]; struct node { int next; int to; }edge[N]; int head[maxn]; int tot; void addedge(int from,int to) { edge[tot].to=to; edge[tot].next=head[from]; head[from]=tot++; } bool bfs(int root) { queue<int>qu; while(!qu.empty()) qu.pop(); col[root]=1; qu.push(root); while(!qu.empty()) { int u=qu.front(); qu.pop(); for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].to; if(col[v]==-1) { col[v]=(!col[u]); qu.push(v); } if(col[v]==col[u]) return false; } } return true; } int main() { int t; scanf("%d",&t); int n,m,u,v; int icase=1; while(t--) { memset(head,-1,sizeof(head)); memset(col,-1,sizeof(col)); tot=0; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } bool flag; for(int i=1;i<=n;i++) { if(col[i]==-1) { flag=bfs(i); if(!flag) break; } } printf("Scenario #%d:\n",icase++); if(flag) printf("No suspicious bugs found!\n\n"); else printf("Suspicious bugs found!\n\n"); } return 0; }
/************************************************************************* > File Name: POJ2492.cpp > Author: ALex > Mail: 405045132@qq.com > Created Time: 2015年01月22日 星期四 13时19分31秒 ************************************************************************/ #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 2010; int opp[N]; int father[N]; int find (int x) { if (father[x] == -1) { return x; } return father[x] = find (father[x]); } void merge (int a, int b) { int aa = find (a); int bb = find (b); if (aa != bb) { father[aa] = bb; } } int main () { int t; int icase = 1; scanf("%d", &t); int n, m; while (t--) { int u, v; bool flag = false; scanf("%d%d", &n, &m); memset (father, -1, sizeof(father)); memset (opp ,-1, sizeof(opp)); while (m--) { scanf("%d%d", &u, &v); if (flag) { continue; } int uu = find (u); int vv = find (v); if (uu == vv) { flag = true; } else { if (opp[u] == - 1 && opp[v] == -1) { opp[u] = v; opp[v] = u; } else if (opp[u] == -1) { opp[u] = v; merge (u, opp[v]); } else if (opp[v] == -1) { opp[v] = u; merge (v, opp[u]); } else { merge (v, opp[u]); merge (u, opp[v]); } } } printf("Scenario #%d:\n", icase++); if (flag) { printf("Suspicious bugs found!\n"); } else { printf("No suspicious bugs found!\n"); } printf("\n"); } return 0; }
标签:poj
原文地址:http://blog.csdn.net/guard_mine/article/details/43018387