CSU 1804 有向无环图 (拓扑排序+乱搞)
来源:互联网 发布:手机打卡考勤软件 编辑:程序博客网 时间:2024/05/01 00:28
有向无环图
Time Limit: 5000MS Memory Limit: 131072KB 64bit IO Format: %lld & %llu
Submit
Status
Description
Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。
为了方便,点用 1,2,…,n 编号。 设 count(x,y) 表示点 x 到点 y 不同的路径数量(规定 count(x,x)=0),Bobo 想知道
除以 (10 9+7) 的余数。
其中,a i,b j 是给定的数列。
Input
输入包含不超过 15 组数据。
每组数据的第一行包含两个整数 n,m (1≤n,m≤10 5).
接下来 n 行的第 i 行包含两个整数 a i,b i (0≤a i,b i≤10 9).
最后 m 行的第 i 行包含两个整数 u i,v i,代表一条从点 u i 到 v i 的边 (1≤u i,v i≤n)。
Output
对于每组数据,输出一个整数表示要求的值。
Sample Input
3 3
1 1
1 1
1 1
1 2
1 3
2 3
2 2
1 0
0 2
1 2
1 2
2 1
500000000 0
0 500000000
1 2
Sample Output
4
4
250000014
先拓扑排序一下,根据拓扑序我们维护一个链条(单一路径),对每个节点做合并即可(因为可能有多条路径,每条都要算)。
#include "cstring"#include "iostream"#include "string.h"#include "cstdio"#include "queue"#define MOD 1000000007#define MAX 100005using namespace std;int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { vector<int> list[MAX]; long long a[MAX],b[MAX]; int degree[MAX]; long long sum[MAX]; memset(degree,0,sizeof(degree)); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { scanf("%lld%lld",&a[i],&b[i]); sum[i]=b[i]; } for(int i=1;i<=m;i++) { int fa,son; scanf("%d%d",&fa,&son); degree[fa]++; list[son].push_back(fa); } queue<int> original; queue<int> sorted; for(int i=1;i<=n;i++) { if(degree[i]==0) original.push(i); } //topology sort while(!original.empty()) { int son=original.front(); original.pop(); for(int i=0;i<list[son].size();i++) { int fa=list[son][i]; degree[fa]--; if(degree[fa]==0) original.push(fa); } sorted.push(son); } long long ans=0; while(!sorted.empty()) { int son=sorted.front(); sorted.pop(); for(int i=0;i<list[son].size();i++) { int fa=list[son][i]; ans=(ans+(a[fa]*sum[son])%MOD)%MOD; sum[fa]=(sum[fa]+sum[son])%MOD; } } printf("%lld\n",ans%MOD); }}
0 0
- CSU 1804 有向无环图 (拓扑排序+乱搞)
- CSU 1804: 有向无环图 (拓扑排序)
- CSU 1804有向无环图 (拓扑排序dp)
- [CSU 1804 有向无环图] DP+拓扑排序
- CSU-1804-有向无环图-拓扑排序+DP
- CSU-1804 有向无环图(拓扑排序+dp)(湖南省第十二届大学生程序设计竞赛)
- CSU 1804 有向无环图 拓扑序DP
- CSU 1804 有向无环图 (DP+拓扑排序) 【湖南省第十二届大学生计算机程序设计竞赛 - B】
- CSU 1804 有向无环图
- CSU 1804: 有向无环图
- csu 1804 有向无环图
- 有向无环图的拓扑排序
- 有向无环图的拓扑排序
- 有向无环图的拓扑排序
- 有向无环图- CSU1804(拓扑排序)
- CSU1804:有向无环图 拓扑排序
- 算法 有向无环图 拓扑排序
- 【图论】有向无环图的拓扑排序
- 2016工作回顾
- 性能优化第一篇—数据库性能优化
- vs2005 c++ mfc预编译头文件来自编译器的早期版本
- photoshop快捷键(不断更新....)
- Oracle中的函数instr函数
- CSU 1804 有向无环图 (拓扑排序+乱搞)
- springmvc下载文件
- 八皇后算法
- 软件测试和软件质量
- java笔记short相加自动转换
- 06--Tools for IO stream (The Second Wave)
- openwrt dmesg 信息 清除
- Linux 修改swap虚拟内存大小
- TCP/IP ECN分析