답안 #25761

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
25761 2017-06-24T05:25:59 Z 서규호(#1081) 전압 (JOI14_voltage) C++14
0 / 100
66 ms 10376 KB
#include <bits/stdc++.h>

#define lld long long
#define pp pair<int,int>
#define pb push_back
#define MOD 1000000007
#define left lleft
#define right rright
#define INF 2000000000
#define Linf 1000000000000000000LL
#define next nnext
#define minus mminus

using namespace std;

int N,M,cnt,ans;
int color[100002],lev[100002],par[100002];
bool check[100002];
vector<int> edge[100002];

bool bipartite;
void dfs(int x){
	check[x] = true;
	for(auto &i : edge[x]){
		if(color[i] == color[x]){
			bipartite = false;
		}else color[i] = 3-color[x];
		if(check[i]) continue;
		dfs(i);
	}
}
void dfs2(int x){
	check[x] = true;
	int tcnt = 0;
	for(auto &i : edge[x]){
		if(tcnt == 0 && i == par[x]){
			tcnt = 1;
			continue;
		}
		if(check[i]){
			if((lev[x]-lev[i])%2 == 0){
				ans = abs(lev[x]-lev[i])+1;
			}
		}else{
			lev[i] = lev[x]+1;
			par[i] = x;
			dfs2(i);
		}
	}
}

int main(){
	scanf("%d %d",&N,&M);
	for(int i=1; i<=M; i++){
		int x,y;
		scanf("%d %d",&x,&y);
		edge[x].pb(y);
		edge[y].pb(x);
	}
	int it;
	for(int i=1; i<=N; i++){
		if(check[i]) continue;
		bipartite = true;
		color[i] = 1;
		dfs(i);
		if(!bipartite){
			it = i;
			cnt++;
		}
	}
	if(cnt >= 2){
		puts("0");
		return 0;
	}else if(cnt == 0){
		printf("%d\n",N);
		return 0;
	}
	for(int i=1; i<=N; i++) check[i] = false;
	cnt = 0;
	dfs2(it);
	printf("%d\n",ans);

	return 0;
}	

Compilation message

voltage.cpp: In function 'int main()':
voltage.cpp:53:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&N,&M);
                      ^
voltage.cpp:56:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&x,&y);
                       ^
voltage.cpp:80:10: warning: 'it' may be used uninitialized in this function [-Wmaybe-uninitialized]
  dfs2(it);
          ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 5632 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 46 ms 9348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 39 ms 9348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 66 ms 10376 KB Output isn't correct
2 Halted 0 ms 0 KB -