WA*4求助
查看原帖
WA*4求助
667250
Xiphi楼主2023/12/5 17:05
#include<bits/stdc++.h>
using namespace std;
int n,m,q,a[200005];
set<int> s[200005];
pair<int,int> tag[200005];
int main(){
    cin>>n>>m>>q;
    for(int i=1;i<=n;++i) a[i]=i,tag[i]={-1,-1};
    for(int i=1,x,y;i<=m;++i){
        cin>>x>>y;
        s[x].insert(y);
        s[y].insert(x);
    }
    int tim=0;
    while(q--){
        tim++;
        int u,v;
        cin>>u;
        if(s[u].size()<=sqrt(m)){
            int yyy=a[u],t=tag[u].first,t1=a[u];
            for(set<int>::iterator it=s[u].begin();it!=s[u].end();++it){
                if(tag[*it].second!=-1){
                    if(tag[*it].first>t) t=tag[*it].first,t1=tag[*it].second;
                }
            }
            a[u]=t1;
            for(set<int>::iterator it=s[u].begin();it!=s[u].end();++it){
                a[*it]=t1;
            }
            tag[u]={t,t1};
        }else{
            tag[u]={tim,a[u]};
        }
    }
    for(int u=1;u<=n;++u){
        int y1=a[u],yyy=tag[u].first,t=tag[u].first,t1=a[u];
        for(set<int>::iterator it=s[u].begin();it!=s[u].end();++it){
            if(tag[*it].second!=-1){
                if(tag[*it].first>t) t=tag[*it].first,t1=tag[*it].second;
            }
        }
        a[u]=t1;
    }
    for(int i=1;i<=n;++i) cout<<a[i]<<' ';
    return 0;
}

2023/12/5 17:05
加载中...