HDU 5638 Toposort
来源:互联网 发布:个人网络存储器哪个好 编辑:程序博客网 时间:2024/05/08 12:58
Problem Description
There is a directed acyclic graph with n vertices and m edges. You are allowed to delete exact k edges in such way that the lexicographically minimal topological sort of the graph is minimum possible.
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
The first line contains three integersn , m and k (1≤n≤100000,0≤k≤m≤200000) -- the number of vertices, the number of edges and the number of edges to delete.
For the nextm lines, each line contains two integers ui and vi , which means there is a directed edge from ui to vi (1≤ui,vi≤n) .
You can assume the graph is always a dag. The sum of values ofn in all test cases doesn't exceed 106 . The sum of values of m in all test cases doesn't exceed 2×106 .
The first line contains three integers
For the next
You can assume the graph is always a dag. The sum of values of
Output
For each test case, output an integer S=(∑i=1ni⋅pi) mod (109+7) , where p1,p2,...,pn is the lexicographically minimal topological sort of the graph.
Sample Input
34 2 01 21 34 5 12 13 14 12 32 44 4 21 22 33 41 4
Sample Output
302730
有向图删除k条边使得拓扑序列字典序最小,可以直接用优先队列维护。
#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<functional>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1e5+10;const int mod=1e9+7;int T,n,m,k,cnt[maxn],x,y,vis[maxn];vector<int> t[maxn];int main(){scanf("%d",&T);while (T--){scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=n;i++) t[i].clear(),cnt[i]=vis[i]=0;while (m--){scanf("%d%d",&x,&y);t[x].push_back(y);cnt[y]++;}priority_queue<int,vector<int>,greater<int> > p;for (int i=1;i<=n;i++) if (cnt[i]<=k) p.push(i),vis[i]=1;int res=0,i=1;while (!p.empty()){int q=p.top();p.pop();if (cnt[q]>k) {vis[q]=0; continue;}(res+=(LL)q*i++%mod)%=mod;k-=cnt[q];for (int i=0;i<t[q].size();i++){cnt[t[q][i]]--;if (!vis[t[q][i]]&&cnt[t[q][i]]<=k){p.push(t[q][i]);vis[t[q][i]]=1;}}}printf("%d\n",res);}return 0;}
0 0
- HDU 5638 Toposort
- HDU 5638 Toposort
- HDU 5638:Toposort 优先队列
- HDU 5638 Toposort 拓扑排序 优先队列
- 【hdu 5638】Toposort 中文题意&题解&代码(C++)
- HDU 5638 Toposort(贪心+优先队列+拓扑排序)
- hdu 5438 Ponds(toposort+DFS)
- TopoSort
- toposort
- hdoj 5638 Toposort 【线段树 维护 拓扑序】
- BestCoder Round #74 (div.2) T4 Toposort HDOJ 5638
- 图toposort
- 拓扑排序 toposort
- Toposort(拓扑排序)
- 拓扑排序toposort 模板
- toposort算法模板
- POJ 1094(TopoSort)
- 拓扑排序(Toposort)
- 【浅墨Unity3D Shader编程】之十二 可编程Shader初步 & 漫反射可编程Shader的实现
- 怎么让Windows2012和Windows2008多用户同时远程
- 查找
- linux文件查找
- 状态模式
- HDU 5638 Toposort
- Kafka是如何实现高吞吐率的
- 删除Android Studio中的module,或者Library。
- 使用frame制作导航框架
- ajax注册页面异步验证
- Krustral 算法
- 蓝桥杯:报时助手
- Spring -- spring template Spring的JDBC(一)
- 《基于MFC的OpenGL编程》Part 13 Quadrics