程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> HDOJ 題目3478 Catch(染色法判二分圖)

HDOJ 題目3478 Catch(染色法判二分圖)

編輯:關於C++

Catch

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1299 Accepted Submission(s): 635



Problem Description A thief is running away!
We can consider the city where he locates as an undirected graph in which nodes stand for crosses and edges stand for streets. The crosses are labeled from 0 to N–1.
The tricky thief starts his escaping from cross S. Each moment he moves to an adjacent cross. More exactly, assume he is at cross u at the moment t. He may appear at cross v at moment t + 1 if and only if there is a street between cross u and cross v. Notice that he may not stay at the same cross in two consecutive moment.
The cops want to know if there’s some moment at which it’s possible for the thief to appear at any cross in the city.

Input The input contains multiple test cases:
In the first line of the input there’s an integer T which is the number of test cases. Then the description of T test cases will be given.
For any test case, the first line contains three integers N (≤ 100 000), M (≤ 500 000), and S. N is the number of crosses. M is the number of streets and S is the index of the cross where the thief starts his escaping.
For the next M lines, there will be 2 integers u and v in each line (0 ≤ u, v < N). It means there’s an undirected street between cross u and cross v.


Output For each test case, output one line to tell if there’s a moment that it’s possible for the thief to appear at any cross. Look at the sample output for output format.


Sample Input
2
3 3 0
0 1
0 2
1 2
2 1 0
0 1

Sample Output
Case 1: YES
Case 2: NO


HintFor the first case, just look at the table below. (YES means the thief may appear at the cross at that moment)
\
For the second input, at any moment, there’s at least one cross that the thief can’t reach.
Source 2010 ACM-ICPC Multi-University Training Contest(5)——Host by BJTU
Recommend zhengfeng | We have carefully selected several similar problems for you: 3486 3484 3483 3482 3481 ac代碼 不判聯通也能過
#include
#include
#include
int s,n,m,cnt,ans;
int head[100010],vis[100010],color[100010];
struct s
{
	int u,v,next;
}edge[500010*2];
void add(int u,int v)
{
	edge[cnt].u=u;
	edge[cnt].v=v;
	edge[cnt].next=head[u];
	head[u]=cnt++;
}
void dfs(int u)
{
	vis[u]=1;
	ans++;
	for(int i=head[u];i!=-1;i=edge[i].next)
	{
		int v=edge[i].v;
		if(vis[v]==0)
			dfs(v);
	}
}
int link()
{
	ans=0;
	memset(vis,0,sizeof(vis));
	dfs(0);
	if(ans==n)
		return 1;
	return 0;
}
int dfs(int u,int c)
{
	if(!color[u])
	{
		color[u]=c;
	}
	else
	{
		if(color[u]==c)
			return 0;
		return 1;
	}
	for(int i=head[u];i!=-1;i=edge[i].next)
	{
		int v=edge[i].v;
		if(dfs(v,-c))
			return 1;
	}
	return 0;
}
int jud()
{
	memset(color,0,sizeof(color));
	int i;
	for(i=0;i<n;i++) {="" if(!color[i])="" if(dfs(i,1))="" return="" 0;="" }="" 1;="" int="" main()="" t,c="0;" scanf("%d",&t);="" while(t--)="" i;="" scanf("%d%d%d",&n,&m,&s);="" memset(head,-1,sizeof(head));="" cnt="0;" for(i="0;i


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved