28pts,求助!!!!
查看原帖
28pts,求助!!!!
470782
Anonymous__user楼主2022/7/27 11:02
#include<bits/stdc++.h>
using namespace std;
long long read(){
	long long x=0,sgn=1;char ch=getchar();
	while(ch<'0' || ch>'9'){if(ch=='-')sgn=-1;ch=getchar();}
	while(ch>='0' && ch<='9'){x=(x<<3)+(x<<1)+(ch&15);ch=getchar();}
	return x*sgn;
}
long long n,m,x,y,k,K,tot,l,r,num,save,aans,b[100010],c[100010],d[100010],t[100010];
long long u[100010],v[100010],nex[100010],poi[100010];
bool vis[10010];
void zao(long long x,long long y){
	k++;u[k]=x;v[k]=y;nex[k]=poi[x];poi[x]=k;
}
void dddfs1(long long x){
	vis[x]=true;
	long long save=poi[x];
	while(save>0){
		if(save%2==1){
			if(vis[v[save]]==false)
				dddfs1(v[save]); 
		}
		save=nex[save];
	}
	num++;
	t[num]=x;
}
void dddfs2(long long x){
	vis[x]=true;
	long long save=poi[x];
	while(save>0){
		if(save%2==0){
			if(vis[v[save]]==false){
				b[v[save]]=tot;
				c[tot]++;
				dddfs2(v[save]);
			}
		}
		save=nex[save];
	} 
}
int main(){
	n=read();m=read();
	for(int i=1;i<=m;i++){
		x=read();y=read();
		zao(x,y);
		zao(y,x); 
	}
	for(int i=1;i<=n;i++)
		if(vis[i]==0)
			dddfs1(i);
	memset(vis,0,sizeof(vis));
	for(int i=n;i>=1;i--)
		if(vis[t[i]]==true)continue;
		else{
			tot++;
			b[t[i]]=tot;
			c[tot]++;
			dddfs2(t[i]);
		}
	for(int i=1;i<=tot;i++)
		if(c[i]>1)aans++;
	printf("%lld\n",aans);
	return 0;
}
2022/7/27 11:02
加载中...