题目链接:

  http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804

题目大意:

  一个有向无环图(DAG),有N个点M条有向边(N,M<=105),每个点有两个值ai,bi(ai,bi<=109),count(i,j)表示从i走到j的方案数。

  求mod 109+7的值。

题目思路:

  【拓扑】【宽搜】

  首先将式子拆开,每个点I走到点J的d[j]一次就加上一次ai,这样一个点被i走到的几次就加上几次ai,相当于count(i,j)*ai,最终只要求Σ(bj*d[j])即可。

  将这张有向无环图按照拓扑序加入队列,这样保证做到第i个点时在它之后不会再被更新答案(也就是说后面不会影响前面的值,这样才能通过前面的值推出后面的)

  每个点I都把点I的后继节点的d加上ai,最终按照上面那样求Σ(bj*d[j])即可。

 //
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<bitset>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10000
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 100004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
LL aans;
struct xxx
{
int next,to;
}a[N];
int last[N],q[N],in[N],aa[N],bb[N];
LL d[N];
void add(int x,int y)
{
a[++lll].to=y;
a[lll].next=last[x];
last[x]=lll;
}
void tuopu()
{
int i,l,r=;
for(i=;i<=n;i++)if(!in[i])q[++r]=i;
for(l=;l<=r && r!=n;l++)
for(i=last[q[l]];i;i=a[i].next)
if(--in[a[i].to]==)
q[++r]=a[i].to;
for(l=;l<=n;l++)
for(i=last[q[l]];i;i=a[i].next)
d[a[i].to]=(d[a[i].to]+d[q[l]]+aa[q[l]])%mod;
for(i=;i<=n;i++)
aans=(aans+1LL*d[i]*bb[i])%mod;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s+1))
while(~scanf("%d",&n))
{
lll=aans=;mem(last,);mem(in,);mem(d,);
scanf("%d",&m);
for(i=;i<=n;i++)scanf("%d%d",aa+i,bb+i);
for(i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);in[y]++;
}
tuopu();
printf("%lld\n",aans);
}
return ;
}
/*
// //
*/

最新文章

  1. ABP文档 - 导航
  2. 创业方向:O2O及移动社交 from 沈博阳
  3. java.lang.NoClassDefFoundError: javax/el/ELResolver 问题解决
  4. hdu4067
  5. HTML5学习之跨文档传输消息(七)
  6. it&#39;s hard to say
  7. &lt;b&gt;和&lt;strong&gt;标签区别
  8. jBPM5 vs Actitivi
  9. JY05-JavsScript-JS基础01
  10. WPF之Binding的三种简单写法
  11. 算法——A*——HDOJ:1813
  12. mybatis遇见的奇葩问题(返回null)
  13. checking for known struct flock definition... configure: error: Don&#39;t know how to define struct flock on this system, set --enable-opcache=
  14. 安装Postgresql
  15. oracle的部分增删查改
  16. corda
  17. HTTPS原理和CA证书申请(转)
  18. bootstrap 弹框使用
  19. T-SQL 简单子查询
  20. 如何跟踪某个session的SQL

热门文章

  1. .net 学习路线感想
  2. oracle中用comment on的用法
  3. jQuery 删除元素
  4. Java GC 日志输出分析
  5. X3850 Linux 下DSA日志收集办法
  6. 104. Maximum Depth of Binary Tree(C++)
  7. jQuery--引入,基本语法,以及常用事件
  8. 常用jQuery选择器总结【转】
  9. EasyUI篇のDataGrid
  10. hiho一下103周 平衡树&#183;Treap