上一篇 不是说 第二种方法RE了吗? 害,其实,是我的问题 我粗心了。------------------------------------------------------
因为
这两处的循环应该到n而不是m。害 当时写的晕了 脑子没有转过弯 呜呜呜呜呜=======================
这个方法的区别就是开了一个二位数组map[5005][5005] 用于记录关系(相比于上一篇利用h[5005]数组记录 这个方法 开销更大,但是更容易想)
这里就不多赘述了,具体代码如下:
#include<iostream> #include<queue> #define N 80112002 using namespace std; int map[5005][5005],f[5005],chu[5005],ru[5005]; int n,m,sum; queue<int> q; int main(){ int a,b; cin>>n>>m; for(int i = 1;i <= m;i++){ cin>>a>>b; map[a][b] = 1; chu[a]++; ru[b]++; } for(int j = 1;j <= n;j++){ if(ru[j] == 0){ f[j] = 1; q.push(j); } } while(!q.empty()){ int a = q.front(); q.pop(); for(int i = 1;i <= n;i++){ if(map[a][i] == 0) continue; f[i] += f[a]; f[i] %= N; ru[i]--; if(ru[i] == 0){ if(chu[i] == 0){ sum += f[i]; sum %= N; continue; } else q.push(i); } } } cout<<sum<<endl; return 0; }
okok, 加油小灰灰 这小不能再粗心了 ------------------------------------
标签:食物链,洛谷,一篇,5005,map,int,第二种,方法,P4017 From: https://www.cnblogs.com/fighting-huihui/p/17027844.html