답안 #752256

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
752256 2023-06-02T15:22:55 Z definitelynotmee 장난감 기차 (IOI17_train) C++17
0 / 100
7 ms 1236 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(j);
						degree[j] = -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;
					
					degree[i]--;

					if(a[i]){
						if(degree[i] == -1){
							st.push_back(i);
						}
					} else {
						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:28:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |  for(int i = 0; i < u.size(); i++){
      |                 ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 852 KB 3rd lines differ - on the 1st token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB 3rd lines differ - on the 3rd 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: '0', found: '1'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 1108 KB 3rd lines differ - on the 1st 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 5 ms 852 KB 3rd lines differ - on the 1st token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -