Submission #1226737

#TimeUsernameProblemLanguageResultExecution timeMemory
1226737ereringTraffic (CEOI11_tra)C++20
100 / 100
732 ms62304 KiB
#include <bits/stdc++.h>
#define pb push_back
#define int long long
#define endl '\n'
using namespace std;
using ll=long long;
const int MAXN=3e5+5,inf=2e18;
vector<int> adj[MAXN],rev[MAXN];
pair<int,int> p[MAXN];
bool vis[MAXN];
int mn[MAXN],mx[MAXN];
void dfs(int node){
    vis[node]=1;
    for(auto i:adj[node]){
        if(!vis[i])dfs(i);
    }
}
void dfs2(int node,int cnt){
    mn[node]=cnt;
    for(auto i:rev[node]){
        if(mn[i]==0)dfs2(i,cnt);
    }
}
void dfs3(int node,int cnt){
    mx[node]=cnt;
    for(auto i:rev[node]){
        if(mx[i]==0)dfs3(i,cnt);
    }
}
signed main(){
     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
     int n,m,a,b; cin>>n>>m>>a>>b;
     vector<pair<int,int>> bro;
     for(int i=1;i<=n;i++){
         cin>>p[i].first>>p[i].second;
         if(p[i].first==0)bro.pb({p[i].second,i});
     }
     for(int i=0;i<m;i++){
         int c,d,k; cin>>c>>d>>k;
         adj[c].pb(d);
         rev[d].pb(c);
         if(k==2){
             adj[d].pb(c);
             rev[c].pb(d);
         }
     }
     for(int i=1;i<=n;i++){
         if(p[i].first==0 && !vis[i])dfs(i);
     }
     vector<pair<int,int>> vec;
     for(int i=1;i<=n;i++){
         if(p[i].first==a && vis[i])vec.pb({p[i].second,i});
     }
     cout<<endl;
     sort(vec.begin(),vec.end());
     for(int i=0;i<vec.size();i++){
         if(mn[vec[i].second]==0)dfs2(vec[i].second,i+1);
     }
     for(int i=vec.size()-1;i>=0;i--){
         if(mx[vec[i].second]==0)dfs3(vec[i].second,i+1);
     }
     sort(bro.begin(),bro.end());
     for(int i=bro.size()-1;i>=0;i--){
         int id=bro[i].second;
         cout<<(mx[id]==0?0:mx[id]-mn[id]+1)<<endl;
     }
}
#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...
#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...