Submission #226975

#TimeUsernameProblemLanguageResultExecution timeMemory
226975PedroBigManToy Train (IOI17_train)C++14
0 / 100
23 ms5760 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <list>
#include "train.h"
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=(ll)a; i<(ll)b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define whole(x) x.begin(),x.end()
#define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl
#define INF 100000000000000000LL
ll insig;
#define In(vecBRO, LENBRO) REP(IBRO,0,LENBRO) {cin>>insig; vecBRO.pb(insig);}
void Out(vector<ll> x) {REP(i,0,x.size()) {cout<<x[i]<<" ";} cout<<endl;}

class DiGraph
{
    public:
    ll N;
    vector<vector<ll> > adj; 
    vector<bool> visited;
    vector<int> rc;
    ll special; bool revisited;
    
    DiGraph(vector<vector<ll> > ad)
    {
        adj=ad; N=adj.size(); REP(i,0,N) {visited.pb(false);}
    }
    
    void Reset()
    {
        REP(i,0,N) {visited[i]=false;}
        revisited=false;
    }
    
    void DFS(ll s) 
    {
        if(visited[s]) {return;}
        visited[s]=true;
        REP(i,0,adj[s].size())
        {
            if(!visited[adj[s][i]] && rc[adj[s][i]]==0) {DFS(adj[s][i]);}
            else if(adj[s][i]==special) {revisited=true;}
        }
        return;
    }
};

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) 
{
    ll N=a.size(); ll M=u.size(); 
    vector<vector<ll> > adj, adjr; vector<ll> xx; REP(i,0,N) {adj.pb(xx); adjr.pb(xx);}
    REP(i,0,M)
    { 
        adj[u[i]].pb(v[i]); adjr[v[i]].pb(u[i]);
    }
    DiGraph G(adj); DiGraph GR(adjr); REP(i,0,N) {G.rc.pb(r[i]);}
	vector<int> ans; REP(i,0,N) {ans.pb(1);}
    REP(i,0,N)
    {
        if(r[i]==1) {continue;}
        G.Reset(); G.special=i;
        G.DFS(i);
        if(G.revisited) 
        {
            GR.Reset(); GR.DFS(i);
            REP(j,0,N) {if(GR.visited[j]) {ans[j]=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...