建议加强数据
查看原帖
建议加强数据
1333279
ClaudeHsu楼主2025/2/7 15:34
#include<bits/stdc++.h>
using namespace std;
int vis[10005],b[10005],n,m,u,v,pd,ans,ad;
vector<int>a[10005];
void dfs(int x){
    if(pd==1)return;
    for(int i=0;i<a[x].size();++i){
        if(!vis[a[x][i]]){
            vis[a[x][i]]=1;
            if(b[a[x][i]]==1){
                pd=1;
                return;
            }
            dfs(a[x][i]);
        }
    }
}
int main(){
	memset(b,-1,sizeof(b));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		a[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		if(b[i]==0)continue;
		pd=0;
		memset(vis,0,sizeof(vis));
        vis[i]=1;
        dfs(i);
        if(pd==1){
			b[i]=1;
			ans++;
		}
		else{
            pd=0;
            for(int j=1;j<=n;j++){
                if(vis[j]==0){
                    pd=1;
                    break;
                }
            }
            if(pd==0){
                b[i]=1;
                ans++;
            }
            if(pd==1){
                for(int j=1;j<=n;j++)
				if(vis[j])b[j]=0;
            }
        }
	}
	cout<<ans;
	return 0;
}

这都能过???

2025/2/7 15:34
加载中...