hdu 2647【反向拓扑+前向星】
来源:互联网 发布:调查问卷数据分析报告 编辑:程序博客网 时间:2024/06/08 05:27
Reward
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9199 Accepted Submission(s): 2937
Problem Description
Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to distribute rewards to his workers. Now he has a trouble about how to distribute the rewards.
The workers will compare their rewards ,and some one may have demands of the distributing of rewards ,just like a's reward should more than b's.Dandelion's unclue wants to fulfill all the demands, of course ,he wants to use the least money.Every work's reward will be at least 888 , because it's a lucky number.
The workers will compare their rewards ,and some one may have demands of the distributing of rewards ,just like a's reward should more than b's.Dandelion's unclue wants to fulfill all the demands, of course ,he wants to use the least money.Every work's reward will be at least 888 , because it's a lucky number.
Input
One line with two integers n and m ,stands for the number of works and the number of demands .(n<=10000,m<=20000)
then m lines ,each line contains two integers a and b ,stands for a's reward should be more than b's.
then m lines ,each line contains two integers a and b ,stands for a's reward should be more than b's.
Output
For every case ,print the least money dandelion 's uncle needs to distribute .If it's impossible to fulfill all the works' demands ,print -1.
Sample Input
2 11 22 21 22 1
Sample Output
1777-1
#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<stack>#include<queue>#define max_n 20010 using namespace std;typedef long long LL;int head[max_n],out[max_n],in[max_n];int n,m,x,y;struct node{int to;int next;}edge[max_n];void toposort(){int ans=0,sum=0;queue<int> q; //利用栈建立邻接表,运用bfs思想广搜; for(int i=1;i<=n;i++){if(in[i]==0){in[i]--;out[i]=888; //有点dp式的意思,初始一下 q.push(i);}}while(!q.empty()){int node=q.front();q.pop();ans++; for(int i=head[node];i!=-1;i=edge[i].next) //找出所有与当前点连接的所有点,拆去这个边,入度减一 {//printf("%d->%d ",edge[i].to,i);in[edge[i].to]--;if(in[edge[i].to]==0){in[edge[i].to]--;out[edge[i].to]=out[node]+1;q.push(edge[i].to); //压入新的入度为0边 }}printf("\n");}if(ans!=n) printf("-1\n");else{for(int i=1;i<=n;i++)sum+=out[i];printf("%d\n",sum);}}int main(){while(scanf("%d %d",&n,&m)!=EOF){memset(head,-1,sizeof(head));memset(in,0,sizeof(in));memset(out,0,sizeof(out));for(int i=0;i<m;i++) //反向建立topo图 {scanf("%d %d",&x,&y);edge[i].to=x;edge[i].next=head[y];head[y]=i;in[x]++;}toposort();}return 0;}
阅读全文
1 0
- hdu 2647【反向拓扑+前向星】
- hdu 2647 Rewaed(拓扑排序+链式前向星)
- HDU 2647 Reward (拓扑排序 + 链式前向星 )
- 前向星+拓扑排序
- HDU 1285-确定比赛名次(裸拓扑||拓扑+前向星)
- hdu2647 逆拓扑,链式前向星。
- POJ2367Genealogical tree拓扑排序&前向星
- poj 2367 前向星+拓扑排序
- hdu5438 dfs+拓扑排序+前向星
- 拓扑排序模板--链式前向星
- HDU 2647 Reward(反向拓扑)
- 【HDU】-2647-Reward(反向拓扑)
- HDU 4857--逃生【拓扑排序 && 反向拓扑】
- hdu 3687 反向拓扑排序
- Reward——前向星,拓扑排序
- HDU3342 Legal or Not【拓扑排序】【链式前向星】
- HDU2647 Reward(拓扑排序+链式前向星)
- 拓扑排序(链式前向星+队列实现)
- HDU-1272 小希的迷宫(并查集)
- 了解会计人的职业危机
- 深度学习(Deep Learning )学习笔记整理系列之七
- 安装php拓展
- C语言数据类型占字节数
- hdu 2647【反向拓扑+前向星】
- 【Python学习系列二十四】scikit-learn库逻辑回归实现唯品会用户购买行为预测
- js 构造函数
- oracle 基本操作
- java8 Comparator
- Spring实例化-Resource leak: 'context' is never closed
- Weec JS Framework(四)
- SonarQube代码质量管理平台安装与使用
- Vue 响应式原理