为啥 RE?
查看原帖
为啥 RE?
860556
lihaoda0120楼主2024/7/20 18:21

这份代码在第二个点 RE,提交记录:

#include<bits/stdc++.h>
#define fre(name) freopen(name".in","r",stdin),freopen(name".out","w",stdout)
#define psb push_back
#define ppb pop_back
#define fi first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;
int n,m,u,v,col[N],fa[N];
vector<int> g[N];
queue<int> q;
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void merge(int &u,int v){
	u=find(u),v=find(v);
	if(u==v)return;
	if(g[u].size()<g[v].size())swap(u,v);
	fa[v]=u;
	for(int i:g[v])g[u].psb(i);
//	g[v].clear();
}
signed main(){
//	freopen("P6279_2(1).txt","r",stdin);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		g[u].psb(v);
	}
	for(int i=1;i<=n;i++){
		fa[i]=i;
		if(g[i].size()>1)q.push(i);
	}
	while(!q.empty()){
		int u=q.front();q.pop();
		int now=g[u].back();g[u].ppb();
		for(int v:g[u]){
			merge(now,v);
			g[u].ppb();
		}
		g[u].psb(now);
		if(g[now].size()>1)q.push(now);
	}
	int tot=0;
	for(int i=1;i<=n;i++){
		int f=find(i);
		if(!col[f])col[f]=++tot;
		cout<<col[f]<<endl;
	}
	return 0;
}

但是将第二个点的数据下载,在 devc++ 上运行了一下却不会 RE?

这是为啥?

2024/7/20 18:21
加载中...