제출 #1242208

#제출 시각아이디문제언어결과실행 시간메모리
1242208thelegendary08장난감 기차 (IOI17_train)C++17
0 / 100
2095 ms327680 KiB
#include "train.h"
#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define mp make_pair
#define vb vector<bool>
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int,int>
#define vpii vector<pii>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define FOR(i, k, n) for(int i = k; i<n; i++)
const int mxn = 5e3 + 5;
using namespace std;
vvi adj(mxn), revadj(mxn);
int n, m;
std::vector<signed> who_wins(std::vector<signed> a, std::vector<signed> r, std::vector<signed> u, std::vector<signed> v) {
	n = a.size(); m = u.size();
	vi nxt(n);
	vi cyc(n);
	f0r(i, m){
		if(u[i] + 1 == v[i])nxt[u[i]] = 1;
		else cyc[u[i]] = 1;
		adj[u[i]].pb(v[i]);
		revadj[v[i]].pb(u[i]);
	}
	
	vb good(n); //is there any loop without a charger containing me?
	f0r(i, n){
		if(r[i] == 0){
			queue<int>q;
			q.push(i);
			vb vis(n); vis[i] = 1;
			while(!q.empty()){
				int node = q.front();
				q.pop();
				for(auto u : adj[node]){
					if(r[u])continue;
					vis[u] = 1;
					q.push(u);
				}
			}
			for(auto u : revadj[i]){
				if(vis[u])good[i] = 1;
			}
		}
	}
	
	vector<signed> ans(n);
	f0r(i, n){
		queue<int>q;
		q.push(i);
		vb vis(n); vis[i] = 1;
		while(!q.empty()){
			int node = q.front();
			q.pop();
			for(auto u : adj[node]){
				if(r[u])continue;
				vis[u] = 1;
				q.push(u);
			}
		}
		f0r(j, n){
			if(vis[j] && good[j])ans[i] = 1;
		}
		
	}
	
	/*
	f0r(tt, n){
		int x = tt;
		if(cyc[x] && a[x] == 1 && r[x] == 1){
			ans[tt] = 1; continue;
		}
		if(cyc[x] && a[x] == 0 && r[x] == 0){
			ans[tt] = 0; continue;
		}
		bool ok = 0;
		while(nxt[x]){
			x++;
			if(cyc[x] && a[x] == 1 && r[x] == 1){
				ans[tt] = 1; ok = 1; break;
			}
			if(cyc[x] && a[x] == 0 && r[x] == 0){
				ans[tt] = 0; ok = 1; break;
			}
		}
		if(ok)continue;
		if(cyc[x] && r[x])ans[tt] = 1;
		else ans[tt] = 0;
	}
	*/
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...