답안 #113245

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
113245 2019-05-24T12:04:32 Z 김세빈(#2857) Sleepy game (innopolis2018_final_D) C++14
0 / 100
8 ms 5248 KB
#include <bits/stdc++.h>

using namespace std;

vector <int> V[101010], Q;
int D[101010], P[101010];
bool chk[101010], ans[101010], dis[101010];
int D2[101010];
bool chk2[101010], ans2[101010];
int n, m, s;

void check(int p, int v, int r)
{
	chk[p] = 1; ans[p] = v;
	P[p] = r;
	
	if(v == 0){
		for(int &t: V[p]){
			 if(!chk[t]){
			 	check(t, 1, p);
			 }
		}
	}
	else{
		for(int &t: V[p]){	
			if(!chk[t]){
				D[t] --;
				if(D[t] == 0) check(t, 0, p);
			}
		}
	}
}

int main()
{
	int i, a, b, p;
	bool f = 0;
	
	scanf("%d%d", &n, &m);
	
	for(i=1; i<=n; i++){
		scanf("%d", &a); D[i] = a;
		
		for(; a--; ){
			scanf("%d", &b);
			V[b].push_back(i);
		}
		
		if(D[i] == 0) check(i, 0, 0);
		
		D2[i] = D[i];
		if(!D2[i]){
			chk2[i] = 1; ans2[i] = 0;
			Q.push_back(i);
		}
	}
	
	for(; !Q.empty(); ){
		p = Q.back(); Q.pop_back();
		for(int &t: V[p]) if(!chk2[t]){
			chk2[t] = 1; ans2[t] = 1; P[t] = p;
			for(int &x: V[t]) if(!chk2[x]){
				D2[x] --;
				if(D2[x] == 0){
					chk2[x] = 1; ans2[x] = 0; P[x] = t;
					Q.push_back(x);
				}
			}
		}
	}
	
	for(i=1; i<=n; i++){
		if(chk[i] != chk2[i] || ans[i] != ans2[i]) return 1 / 0;
	}
	
	scanf("%d", &s);
	
	if(ans[s]){
		printf("Win\n");
		for(; s; s=P[s]) printf("%d ", s);
		printf("\n");
		return 0;
	}
	
	for(i=1; i<=n; i++){
		for(int &t: V[i]) if(t == s) {
			dis[i] = 1;
			break;
		}
	}
	
	for(i=1; i<=n; i++){
		for(int &t: V[i]) if(dis[t]){
			if(ans[i]){
				printf("Win\n%d %d", s, t);
				for(s=i; s; s=P[s]) printf(" %d", s);
				printf("\n");
				return 0;
			}
			else if(!chk[i]) f = 1;
			break;
		}
	}
	
	if(f) printf("Draw\n");
	else printf("Lose\n");
	
	return 0;
}

Compilation message

D.cpp: In function 'int main()':
D.cpp:73:55: warning: division by zero [-Wdiv-by-zero]
   if(chk[i] != chk2[i] || ans[i] != ans2[i]) return 1 / 0;
                                                     ~~^~~
D.cpp:39:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~
D.cpp:42:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a); D[i] = a;
   ~~~~~^~~~~~~~~~
D.cpp:45:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d", &b);
    ~~~~~^~~~~~~~~~
D.cpp:76:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &s);
  ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 7 ms 5248 KB Execution killed with signal 4 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 5248 KB Execution killed with signal 4 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 5248 KB Execution killed with signal 4 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 8 ms 5248 KB Execution killed with signal 4 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 7 ms 5248 KB Execution killed with signal 4 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -