답안 #1110603

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1110603 2024-11-10T04:48:00 Z Khalid_Alabdullatif Traffic (CEOI11_tra) C++14
100 / 100
1018 ms 74984 KB
#include "bits/stdc++.h"
#define ll long long
using namespace std;
const int N=5e5+1,mod=1e9+7;
vector<int>l,r;
vector<vector<int>>v(N),rev(N);
int n,m,A,B;
int x[N],y[N];
bool vis[N],removed[N];
void dfs(int idx){
    vis[idx]=1;
    for(auto i:v[idx])
        if(!vis[i] && !removed[i])
            dfs(i);
    
}
void del(int idx){
    vis[idx]=1;
    for(auto i:v[idx])
        if(!vis[i])
            del(i);
}
void delr(int idx){
    vis[idx]=1;
    for(auto i:rev[idx])
        if(!vis[i])
            delr(i);
}
int mx[N],mn[N];
int main(){
    cin>>n>>m>>A>>B;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
        if(x[i]==0)
            l.push_back(i);
        if(x[i]==A)
            r.push_back(i);
    }
    sort(l.begin(),l.end(),[](int i, int j){
       return y[i] < y[j]; 
    });
    sort(r.begin(),r.end(),[](int i, int j){
       return y[i] < y[j]; 
    });
    //reverse(l.begin(),l.end());
    while(m--){
        int d,c,k;
        cin>>c>>d>>k;
        v[c].push_back(d);
        rev[d].push_back(c);
        if(k==2){
            v[d].push_back(c);
            rev[c].push_back(d);
        }
    }
    vector<int>r1;
    for(auto i:l)
        del(i);
    for(int i=1;i<=n;i++)
        if(!vis[i])
            removed[i]=1;

    memset(vis,0,sizeof vis);
    for(auto i:r)
        delr(i);
    for(int i=1;i<=n;i++)
        if(!vis[i])
            removed[i]=1;
    for(int i=0;i<r.size();i++)
        if(!removed[r[i]])
            r1.push_back(r[i]);
    int szl=l.size(),szr1=r1.size();
    memset(vis,0,sizeof vis);
    int idx=0;
    for(int i=0;i<szl;i++){
        if(removed[l[i]])continue;
        dfs(l[i]);
        while(idx+1<szr1 && vis[r1[idx+1]])
            idx++;
        mx[i]=idx;
    }
    memset(vis,0,sizeof vis);
    idx=szr1-1;
    for(int i=szl-1;i>=0;i--){
        if(removed[l[i]])continue;
        dfs(l[i]);
        while(idx-1>=0 && vis[r1[idx-1]])
            idx--;
        mn[i]=idx;
    }
    vector<int>ans;
    for(int i=0;i<szl;i++){
        if(removed[l[i]]) ans.push_back(0);
        else ans.push_back(mx[i]-mn[i]+1);
    }
    reverse(ans.begin(),ans.end());
    for(auto i:ans)cout<<i<<'\n';
    return 0;
}

Compilation message

tra.cpp: In function 'int main()':
tra.cpp:69:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for(int i=0;i<r.size();i++)
      |                 ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 32080 KB Output is correct
2 Correct 7 ms 32080 KB Output is correct
3 Correct 7 ms 32080 KB Output is correct
4 Correct 7 ms 32080 KB Output is correct
5 Correct 7 ms 30032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 32080 KB Output is correct
2 Correct 7 ms 32080 KB Output is correct
3 Correct 8 ms 32080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 32080 KB Output is correct
2 Correct 10 ms 32080 KB Output is correct
3 Correct 8 ms 32080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 32080 KB Output is correct
2 Correct 13 ms 32592 KB Output is correct
3 Correct 11 ms 32336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 32592 KB Output is correct
2 Correct 74 ms 37104 KB Output is correct
3 Correct 39 ms 34296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 34044 KB Output is correct
2 Correct 103 ms 38472 KB Output is correct
3 Correct 57 ms 31048 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 99 ms 35724 KB Output is correct
2 Correct 152 ms 43352 KB Output is correct
3 Correct 179 ms 42992 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 164 ms 37704 KB Output is correct
2 Correct 152 ms 42824 KB Output is correct
3 Correct 250 ms 43604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 267 ms 40008 KB Output is correct
2 Correct 263 ms 49868 KB Output is correct
3 Correct 431 ms 53748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 373 ms 44360 KB Output is correct
2 Correct 490 ms 62144 KB Output is correct
3 Correct 398 ms 54856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 916 ms 55736 KB Output is correct
2 Correct 471 ms 52920 KB Output is correct
3 Correct 759 ms 68936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 247 ms 36168 KB Output is correct
2 Correct 622 ms 67592 KB Output is correct
3 Correct 721 ms 62792 KB Output is correct
4 Correct 1018 ms 74984 KB Output is correct