zoukankan      html  css  js  c++  java
  • 拓扑排序+动态规划

    #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
    ", a%mod);
    	return 0;
    }
    

      

    寻找真正的热爱
  • 相关阅读:
    BM求递推式模板
    主席树浅谈
    DSU on Tree浅谈
    树链剖分浅谈
    省选模拟八 题解
    提答题 总结
    交互题 总结
    省选模拟七 题解
    省选模拟六 题解
    省选模拟五 题解
  • 原文地址:https://www.cnblogs.com/lesning/p/11632484.html
Copyright © 2011-2022 走看看