求助,奇怪的问题
查看原帖
求助,奇怪的问题
146307
袁宇轩楼主2020/10/29 20:38
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define For(i,j,k) for(int i=(int)(j);i<=(int)(k);i++)
#define Rep(i,j,k) for(int i=(int)(j);i>=(int)(k);i--)
inline ll read(){
    ll x=0;char ch=getchar();bool f=0;
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    return f?-x:x;
}
void write(ll x){
    if(x<0) putchar('-'),x=-x;
    if(x>=10) write(x/10);putchar(x%10+'0');
}
void writeln(ll x){write(x);puts("");}
void writep(ll x){write(x);putchar(' ');}

int const K=100+3;
int const N=1000+3;
int const M=10000+3;
int n,m,k,cnt,ans,sum,vis[N],a[N],h[N];
struct edge{
	int nt,to;
}e[M];

void add(int x,int y){
	e[++cnt]=(edge){h[x],y};
	h[x]=cnt;
}

void dfs(int x){
	vis[x]=1;
	sum+=a[x];
	for (int i=h[x];i;i=e[i].nt){
		int v=e[i].to;
		if (vis[v]) continue;
		dfs(v);
	}
}

signed main(){
	k=read();n=read();m=read();
	for (int i=1,x;i<=k;i++) x=read(),a[x]++;	
	for (int i=1;i<=m;i++){
		// int x=read(),y=read();
		// add(x,y);
		add(read(),read());
	}
	for (int i=1;i<=n;i++){
		sum=0;
		memset(vis,0,sizeof(vis));
		dfs(i);
		if (sum==k) ans++;
	}
	writeln(ans);
}

为什么加边操作里面杠掉的部分会错,而改成

add(read(),read());

就能过?

2020/10/29 20:38
加载中...