链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829
用二分图做的,,,,,,刚学图,,以为这道题有向图跟无向图都没影响,,,贡献了N次WA。。调试了好久才找到原因,,
贡献一组测试数据:
89 11
42 2
43 5
23 54
12 55
76 3
33 89
89 32
54 4
34 32
88 67
56 54
NO...
#include <iostream> #include<vector> #include<cstdio> #include<cstring> #define MAX_V 2005 using namespace std; vector <int> g[MAX_V]; int color[MAX_V]; //二分图染色 bool dfs(int v,int c) { int i; color[v]=c; //把节点v染成c色 for(i=0;i<g[v].size();i++) //g[v].size()为当前节点的边数 { if(color[g[v][i]]==c) return false; if(color[g[v][i]]==0 && !dfs( g[v][i],-c) ) return false; } return true; } void solve(int v) { int i; for(i=1; i<=v; i++) if(color[i]==0&&!g[i].empty()) { if(!dfs(i,1)) { printf("Suspicious bugs found! "); return; } } printf("No suspicious bugs found! "); } int main() { int T; int i; int s,t; int v,e; int Case; scanf("%d",&T); for(Case=1; Case<=T; Case++) { memset(color,0,sizeof(color)); for(i=0;i<MAX_V;i++) g[i].clear(); scanf("%d%d",&v,&e); for(i=0; i<e; i++) { scanf("%d%d",&s,&t); //无向图 g[s].push_back(t); g[t].push_back(s); } printf("Scenario #%d: ", Case); solve(v); printf(" "); } return 0; }