站外题求助
  • 板块灌水区
  • 楼主ST_jz_xpj
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/9 19:39
  • 上次更新2024/8/9 20:46:45
查看原帖
站外题求助
1378388
ST_jz_xpj楼主2024/8/9 19:39

描述

有 N 个牧场( 编号分别为 1,2,...,N ),这些牧场之间共有 M 条单向通行的路,每条路直接连接着某两个牧场( 不存在某条路的起点和终点相同的情况 )。在这些牧场中,共居住着 K 头奶牛( 编号分别为 1,2,...,K ),它们想找一个大家都能到达的牧场进行野餐。问:这样的牧场,共有多少个?

输入描述

第 1 行,包含 3 个整数 K,N,M

接下来 K 行,每行包含 1 个整数,分别代表 1,2,...,K 号奶牛居住在哪号牧场。

接下来 M 行,每行包含 2 个整数 a,b,代表有一条连接着 a 号与 b 号牧场的单向通行的路,可以从 a 到 b

【测试数据范围】

1≤K≤100,1≤N≤1000,1≤M≤10000

a!=b

输出描述

输出一行,包含 1 个整数,代表可以作为聚餐地点的牧场有多少个

用例输入 1

2 4 4 2 3 1 2 1 4 2 3 3 4

用例输出 1

2

提示

【样例解释】奶牛们可以选择在 3 号牧场或 4 号牧场进行野餐

内存:64MB;时间:1s

我的代码如下(内存爆了)

#include<iostream>
#include<vector>
using namespace std;
int i,k,n,m,p,a,b,all,p1[110],j;
bool q2[1010][110],g;
vector <int> q1[1010];
void dfs(int i,int t){
    q2[p1[i]][i]=1;
    for(j=0;j<q1[p1[i]].size();j++)dfs(i,q1[p1[i]][j]);
}
int main(){
    cin>>k>>n>>m;
    for(i=1;i<=k;i++)cin>>p1[i];
    for(i=0;i<m;i++){
        cin>>a>>b;
        q1[a].push_back(b);
    }
    for(i=1;i<=k;i++){
        dfs(i,p1[i]);
    }
    for(i=1;i<=n;i++){
        g=true;
        for(j=1;j<=n&&g;j++){
            if(!q2[i][j])g=false;
        }
        if(g)all++;
    }
    cout<<all;
    return 0;
}

各位路过dalao帮帮小蒟蒻吧QAQ

2024/8/9 19:39
加载中...