1 条题解

  • 0
    @ 2025-3-15 14:28:51

    2743 题解

    个人是先计算出每个人能到达的所有地方,再判断每个地方的可到达人数是否=k

    具体代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    int k,n,m;

    int ans;

    int vis[1005];//访问

    int a[105];//人

    int b[1005]={0};//地点能到达人数

    int c[10005][5];//路径

    void dfs(int x){//x为当前地点

    for(int i=1;i<=m;i++){//判断可到达地点
    
    	if(c[i][1]==x&&vis[c[i][2]]==0){
    
    		b[c[i][2]]++;
      
    		vis[c[i][2]]=1;
      
    		dfs(c[i][2]);
      
    	}
    
    }
    

    }

    int main(){

    cin>>k>>n>>m;//输入
    for(int i=1;i<=k;i++){
    	cin>>a[i];
    }
    for(int i=1;i<=m;i++){
    	cin>>c[i][1];
    	cin>>c[i][2];
    }
    for(int i=1;i<=k;i++){
    	memset(vis,0,sizeof(vis));
    	vis[a[i]]=1;
    	b[a[i]]++;
    	dfs(a[i]);
    }
    for(int i=1;i<=n;i++){
    	if(b[i]==k){
    		ans++;
    	}
    }
    cout<<ans;//输出
    return 0;
    

    }

    • 1

    信息

    ID
    2743
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    30
    已通过
    10
    上传者