| 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;
}原文:http://blog.csdn.net/guard_mine/article/details/43018387