为什么会WA
查看原帖
为什么会WA
711031
suyi1111楼主2025/6/22 21:29

这个是我的赛时做法,感觉和std没有逻辑上的区别,就是存边改成了map而已

而且hand的数据都A了,random的第二个就开始出错

提交记录

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
vector<int>e[300001];
map<pair<int,int>,bool>k;
struct edges{
	int u;int v;
}ed[300001];
int fa[300001];
int find(int x){
	if(x==fa[x])return x;
	fa[x]=find(fa[x]);
	return fa[x];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>ed[i].u>>ed[i].v;
		e[ed[i].u].push_back(ed[i].v);
		e[ed[i].v].push_back(ed[i].u);
		k[make_pair(ed[i].u,ed[i].v)]=1;
		k[make_pair(ed[i].v,ed[i].u)]=1;
	}
	int Q;
	cin>>Q;
	ans=m;
	while(Q--){
		int b;
		cin>>b;
		int x=ed[b].u,y=ed[b].v;
		int fax=find(x),fay=find(y);
		if(fax==fay){
			cout<<ans<<'\n';
			continue;
		}
		bool clsf[400010];
		memset(clsf,0,sizeof clsf);
		if(e[fax].size()<e[fay].size())swap(fax,fay); 
		fa[fay]=fax;
		for(int i:e[fay]){
			int mi=find(i);
			if(clsf[mi]==0&&(k[make_pair(fax,mi)]||mi==fax)){
				clsf[mi]=1;
				ans--;
			//	cout<<fax<<' '<<i<<'\n';
			}else{
				k[make_pair(fax,mi)]=k[make_pair(mi,fax)]=1;
				e[fax].push_back(mi);
			}
		} 
		cout<<ans<<'\n';
	}
	return 0;
}
2025/6/22 21:29
加载中...