首页 > 编程语言 > 详细

拓扑排序+动态规划

时间:2019-10-07 22:32:30      阅读:185      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

#include<cstring>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#define maxn 100010
using namespace std;
const long long mod = 1000000000 + 7;
typedef long long ll;
int de[maxn];
vector<int>G[maxn];
int list[maxn];
ll a[maxn];
ll b[maxn];
int t;
void insert(int be, int en) { G[be].push_back(en); }
ll ans = 0;
queue<int>que;
ll topu() {
	while (!que.empty()) {
		int x = que.front();
		que.pop();
		for (int i = 0; i < G[x].size(); i++) {
			int p = G[x][i];
			ans = (ans + (a[x] * b[p]) % mod) % mod;
			a[p] = (a[p] + a[x]) % mod;
			de[p]--;
			if (de[p] == 0) {
				que.push(p);
			}
		}
	}

	return ans%mod;
}

int main() {
	int n, m;
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%lld %lld", &a[i], &b[i]);
	}
	int be, en;
	for (int i = 0; i < m; i++) {
		scanf("%d %d", &be, &en);
		insert(be, en);
		de[en]++;
	}
	for (int i = 0; i < n; i++) {
		if (de[i] == 0) {
			que.push(i);
		}
	}
	ll a = topu();
	printf("%lld\n", a%mod);
	return 0;
}

  

拓扑排序+动态规划

原文:https://www.cnblogs.com/lesning/p/11632484.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!