제출 #574586

#제출 시각아이디문제언어결과실행 시간메모리
574586definitelynotmeeToy Train (IOI17_train)C++98
0 / 100
6 ms1512 KiB
#include<bits/stdc++.h>
#include"train.h"
#define ff first
#define ss second
#define all(x) x.begin(), x.end()
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename T>
using matrix = vector<vector<T>>;

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
	int owned = accumulate(all(a),0);
    int n = a.size(), m = u.size();
    vector<int> resp(n);
    matrix<int> g(n), rev(n);
    for(int i = 0; i < m; i++){
        g[u[i]].push_back(v[i]);
        rev[v[i]].push_back(u[i]);
    }
    if(owned == n){
        
        vector<int> check(n);
        auto dfs =[&](int id, auto dfs)->void{
            check[id] = 1;
            for(int i : rev[id])
                if(!check[i])
                    dfs(i,dfs);
        };
        for(int i = 0; i < n; i++){
            if(!check[i] && r[i])
                dfs(i,dfs);
        }
        for(int i = 0; i < n; i++){
            for(int j : g[i])
                resp[i]|=check[j];
        }
        for(int i = 0; i < n; i++)
            resp[i]&=r[i];
    } else {
        
    }
	return resp;
}
#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...