답안 #752294

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
752294 2023-06-02T16:49:31 Z definitelynotmee 장난감 기차 (IOI17_train) C++17
11 / 100
227 ms 1364 KB
#include "train.h"
#include<bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define ff first
#define ss second
using namespace std;
template <typename T>
using bstring = basic_string<T>;
template <typename T>
using matrix = vector<vector<T>>;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll INFL = (1LL<<62)-1;
const int INF = (1<<30)-1;
const double EPS = 1e-7;
const int MOD = 998244353;
const int RANDOM = chrono::high_resolution_clock::now().time_since_epoch().count();
const int MAXN = 1e6+1;

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
	int n = a.size();
	vector<bstring<int>> g(n), rev(n);

	for(int i = 0; i < u.size(); i++){
		g[u[i]].push_back(v[i]);
		rev[v[i]].push_back(u[i]);
	}

	vector<int> resp(n,1);

	auto topo_sort=[&]{

		vector<int> degree(n);
		vector<int> reach(n);
		vector<int> st;

		for(int i = 0; i < n; i++){
			if(!resp[i])
				continue;

			if(a[i]){
				for(int j : g[i]){
					if(resp[j] && r[j]){
						st.push_back(i);
						degree[i] = -1;
						break;
					}
				}
			} else {
				for(int j : g[i]){
					degree[i]+=!(resp[j] && r[j]);
				}

				if(degree[i] == 0)
					st.push_back(i);
			}
		}

		while(!st.empty()){
			int cur = st.back();
			st.pop_back();
			reach[cur] = 1;

			for(int i : rev[cur]){
				if(!resp[i])
					continue;
				
				if(a[i]){
					degree[i]--;
					if(degree[i] == -1){
						st.push_back(i);
					}
				} else {
					if(r[cur]){
						degree[i]--;
						if(degree[i] == 0){
							st.push_back(i);
						}
					}
				}
			}
		}

		bool ret = 0;

		for(int i = 0; i < n; i++){
			ret|=reach[i]^resp[i];
			resp[i]=reach[i];
		}

		return ret;
	};

	while(topo_sort()){}

	return resp;
}

Compilation message

train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:27:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |  for(int i = 0; i < u.size(); i++){
      |                 ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB 3rd lines differ - on the 26th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 300 KB 3rd lines differ - on the 2nd token, expected: '1', found: '0'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 102 ms 1236 KB Output is correct
2 Correct 189 ms 1236 KB Output is correct
3 Correct 227 ms 1240 KB Output is correct
4 Correct 6 ms 1288 KB Output is correct
5 Correct 12 ms 1364 KB Output is correct
6 Correct 9 ms 1364 KB Output is correct
7 Correct 6 ms 1364 KB Output is correct
8 Correct 7 ms 1236 KB Output is correct
9 Correct 6 ms 1108 KB Output is correct
10 Correct 7 ms 1236 KB Output is correct
11 Correct 7 ms 1236 KB Output is correct
12 Correct 6 ms 1108 KB Output is correct
13 Correct 7 ms 1364 KB Output is correct
14 Correct 7 ms 1364 KB Output is correct
15 Correct 7 ms 1364 KB Output is correct
16 Correct 7 ms 1364 KB Output is correct
17 Correct 7 ms 1364 KB Output is correct
18 Correct 202 ms 852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 1108 KB 3rd lines differ - on the 71st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 1236 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB 3rd lines differ - on the 26th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -