hihocoder 1175 拓扑排序·二
2017-09-16 20:47
344 查看
题目链接:拓扑排序·二
题目大意:有一张无环的有向图,刚开始有一些结点有病毒,他会把他所有的病毒传染到后继结点,问最后所有点的病毒总数
题目思路:拓扑排序,从入度为零的结点开始,删的时候传递结点病毒数就好了
题目大意:有一张无环的有向图,刚开始有一些结点有病毒,他会把他所有的病毒传染到后继结点,问最后所有点的病毒总数
题目思路:拓扑排序,从入度为零的结点开始,删的时候传递结点病毒数就好了
#include <map> #include <set> #include <cmath> #include <queue> #include <stack> #include <vector> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1e5+10; const int mod = 142857; int main(){ int n,m,k,a[maxn],inDeg[maxn],u,v,viru[maxn]; vector<int>vec[maxn]; queue<int>q; while(~scanf("%d%d%d",&n,&m,&k)){ for(int i = 0;i <= n;i++){ vec[i].clear(); viru[i] = 0; } while(!q.empty()) q.pop(); while(k--){ int x; scanf("%d",&x); viru[x]++; } while(m--){ scanf("%d%d",&u,&v); inDeg[v]++; vec[u].push_back(v); } for(int i = 1;i <= n;i++){ if(inDeg[i] == 0) q.push(i); } while(!q.empty()){ int now = q.front(); q.pop(); for(int i = 0;i < vec[now].size();i++){ if(--inDeg[vec[now][i]] == 0) q.push(vec[now][i]); viru[vec[now][i]] = (viru[vec[now][i]]+viru[now])%mod; } } int ans = 0; for(int i = 1;i <= n;i++) ans = (ans+viru[i])%mod; printf("%d\n",ans); } return 0; }
相关文章推荐
- HihoCoder - 1175 拓扑排序·二 拓扑排序、BFS
- hihoCoder 1175:拓扑排序二
- hihocoder 1175 : 拓扑排序·二
- 拓扑排序 hihoCoder1175 拓扑排序·二
- HiHoCoder_#1175 : 拓扑排序·二
- hihocoder 1175 拓扑排序·二(拓扑排序应用)
- hihoCoder - 1175 - 拓扑排序·二 (拓扑排序的应用)
- hihoCoder 47周 拓扑排序
- HihoCoder - 1174 拓扑排序·一 拓扑排序、BFS
- hihocoder 1343 : Stable Members【拓扑排序】
- 【后缀自动机】【拓扑排序】【动态规划】hihocoder1457 后缀自动机四·重复旋律7
- hihocoder 1174 : 拓扑排序·一
- HiHoCoder_#1174 : 拓扑排序·一
- #1175 : 拓扑排序·二
- hihocoder1175
- hihocoder 47 拓扑排序 · 一
- hihocoder #1175 : 拓扑排序·二
- hihoCoder #1175 : 拓扑排序·二(拓扑排序)
- HIHO #1175 : 拓扑排序·二
- hihoCoder - 1014 - Trie树 (简单字典树!!)