Submission #65157

# Submission time Handle Problem Language Result Execution time Memory
65157 2018-08-06T19:19:36 Z mohammad_kilani Toy Train (IOI17_train) C++17
12 / 100
123 ms 2096 KB
#include "train.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
vector< int > res , a , r , g[N] , g2[N];
int n , out[N] , out2[N] , last , vis[N] , vi;
bool have[N];

void make(int node){
	for(int i=0;i<g2[node].size();i++){
		if(a[node] == 1 && node == g2[node][i] && r[node] == 0) continue;
		if(res[g2[node][i]] != -1)
			continue;
		out[g2[node][i]]--;
		if(a[node] == a[g2[node][i]]){
			if(res[node] == a[node]){
				res[g2[node][i]] = a[node];
				make(g2[node][i]);
			}
			else{
				if(out[g2[node][i]] == 0){
					res[g2[node][i]] = a[node] ^ 1;
					make(g2[node][i]);
				}
			}
		}
		else{
			if(res[node] != a[node]){
				res[g2[node][i]] = a[node] ^ 1;
				make(g2[node][i]);
			}
			else{
				if(out[g2[node][i]] == 0){
					res[g2[node][i]] = a[node];
					make(g2[node][i]);
				}
			}
		}
	}
}

void make2(int node){
	for(int i=0;i<g2[node].size();i++){
		if(have[g2[node][i]] || res[g2[node][i]] != -1) continue;
		out2[g2[node][i]]--;
		if(out2[g2[node][i]] == 0){
			have[g2[node][i]] = true;
			make2(g2[node][i]);
			continue;
		}
		if(a[g2[node][i]] == 1){
			have[g2[node][i]] = true;
			make2(g2[node][i]);
		}
	}
}

bool DFS(int node){
	if(a[node] == 0)
		return (res[node] == 1);
	if(node == last)
		return true;
	vis[node] = vi;
	for(int i=0;i<g[node].size();i++){
		if(vis[g[node][i]] != vi && DFS(g[node][i]))
			return true;
	}
	return false;
}


std::vector<int> who_wins(std::vector<int> A, std::vector<int> R, std::vector<int> u, std::vector<int> v) {
	a = A;
	n = (int)a.size();
	r = R;
	res.resize(n , -1);
	for(int i = 0;i<(int)u.size();i++){
		g[u[i]].push_back(v[i]);
		g2[v[i]].push_back(u[i]);
		out[u[i]]++;
		out2[u[i]]++;
	}
	for(int i=0;i<n;i++){
		if(have[i]) continue;
		have[i] = r[i];
		if(have[i] || out2[i] == 0)
			make2(i);
	}
	for(int i = 0;i<(int)u.size();i++){
		if(u[i] == v[i] && a[i] == 1 && r[i] == 0)
			out[u[i]]--;
		if(u[i] == v[i] && a[i] == 0 && r[i] == 1)
			out[u[i]]--;
	}
	for(int i=0;i<n;i++){
		if(res[i] == -1 && out[i] == 0){
			res[i] = a[i] ^ 1;
			make(i);
		}
	}
	for(int i=0;i<n;i++){
		if(res[i] != -1) continue;
		if(!have[i]){
			res[i] = 0;
			make(i);
		}
	}
	for(int i=0;i<n;i++){
		if(res[i] == -1 && a[i] == 0){
			res[i] = 1;
			make(i);
		}
	}
	for(int i=0;i<n;i++){
		if(res[i] != -1) continue;
		last = i;
		vi++;
		if(r[i]){
			for(int j = 0;j<g[i].size();j++){
				if(vis[g[i][j]] != vi && DFS(g[i][j])){
					res[i] = 1;
					break;
				}
			}
			if(res[i] != -1)			
				make(i);
		}
	}
	for(int i=0;i<n;i++){
		if(res[i] == -1)
			res[i] = 0;
	}
	return res;
}

Compilation message

train.cpp: In function 'void make(int)':
train.cpp:10:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<g2[node].size();i++){
              ~^~~~~~~~~~~~~~~~
train.cpp: In function 'void make2(int)':
train.cpp:43:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<g2[node].size();i++){
              ~^~~~~~~~~~~~~~~~
train.cpp: In function 'bool DFS(int)':
train.cpp:64:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<g[node].size();i++){
              ~^~~~~~~~~~~~~~~
train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:119:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j = 0;j<g[i].size();j++){
                  ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 1144 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1144 KB Output is correct
2 Correct 2 ms 1144 KB Output is correct
3 Correct 3 ms 1144 KB Output is correct
4 Correct 2 ms 1144 KB Output is correct
5 Incorrect 2 ms 1144 KB 3rd lines differ - on the 3rd token, expected: '0', found: '1'
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 17 ms 1896 KB Output is correct
2 Correct 43 ms 2096 KB Output is correct
3 Correct 93 ms 2096 KB Output is correct
4 Correct 13 ms 2096 KB Output is correct
5 Correct 21 ms 2096 KB Output is correct
6 Correct 123 ms 2096 KB Output is correct
7 Correct 17 ms 2096 KB Output is correct
8 Correct 13 ms 2096 KB Output is correct
9 Correct 13 ms 2096 KB Output is correct
10 Correct 12 ms 2096 KB Output is correct
11 Incorrect 13 ms 2096 KB 3rd lines differ - on the 89th token, expected: '1', found: '0'
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 2096 KB Output is correct
2 Correct 12 ms 2096 KB Output is correct
3 Correct 13 ms 2096 KB Output is correct
4 Correct 13 ms 2096 KB Output is correct
5 Correct 12 ms 2096 KB Output is correct
6 Correct 13 ms 2096 KB Output is correct
7 Correct 12 ms 2096 KB Output is correct
8 Correct 12 ms 2096 KB Output is correct
9 Incorrect 13 ms 2096 KB 3rd lines differ - on the 48th token, expected: '0', found: '1'
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 21 ms 2096 KB Output is correct
2 Correct 13 ms 2096 KB Output is correct
3 Correct 21 ms 2096 KB Output is correct
4 Correct 13 ms 2096 KB Output is correct
5 Correct 3 ms 2096 KB Output is correct
6 Correct 7 ms 2096 KB Output is correct
7 Correct 11 ms 2096 KB Output is correct
8 Correct 11 ms 2096 KB Output is correct
9 Correct 9 ms 2096 KB Output is correct
10 Correct 4 ms 2096 KB Output is correct
11 Correct 8 ms 2096 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 1144 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -