逆拓扑排序 Reward HDU - 2647
Reward
题意:每个人的起始金额是888,有些人觉得自己做的比另一个人好所以应该多得一些钱,问最少需要花多少钱,如果不能满足所有员工的要求,输出 -1
样例1:
2 1
1 2
输出1777
1认为自己的报酬应该比2多,所以2为888,1为889是最小的情况
样例2:
5 4
1 2
2 5
2 4
4 3
输出4446
相当于给定一张图,n个节点,m条边,问你是否存在环,若存在,则输出-1,为什么?因为存在环的话无法满足所有人的需求例如1->2,1->1,1想比2大,2想比1大,怎么可能?否则如下面思路所示
思路:可以把整张图反过来,若存在u->v,则实际上连接v->u,v的入度为0,那么我们就可以保证初始入度为0的点金额一定是888,在队列过程中,后面的点都继承前面的金额并+1,
#include<iostream>
#include<cstring>
#include<math.h>
#include<stdlib.h>
#include<cstring>
#include<cstdio>
#include<utility>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
inline int read(){
,w=;;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
/*------------------------------------------------------------------------*/
;
vector<int>G[maxn];
int du[maxn];
int n,m;
queue<int>q;
int ans[maxn];
void init(){
;i<=n;++i){
G[i].clear();
du[i]=;
ans[i]=;
}
while(!q.empty())q.pop();
}
int main( )
{
ios_base::sync_with_stdio(); cin.tie(); cout.tie();
//freopen("a.txt","r",stdin);
//freopen("a.txt","w",stdout);
//cin>>n>>m;
while(cin>>n>>m){
init();
;i<=m;++i){
int u,v;
cin>>u>>v;
G[v].push_back(u);
du[u]++;
}
;i<=n;++i)if(!du[i])q.push(i);//度为0入队
while(!q.empty()){
int now=q.front();q.pop();
//ans[]
;i<G[now].size();++i){
int temp=G[now][i];
du[temp]--;
ans[temp]=max(ans[now]+,ans[temp]);
)
q.push(temp);
}
}
;
;i<=n;++i){
if(du[i])
flag=;
break;
}
if(!flag){
;
;i<=n;++i)res+=ans[i];
cout<<res<<endl;
}//cout<<(n*888+n-1)<<endl;
<<endl;
}
;
}
逆拓扑排序 Reward HDU - 2647的更多相关文章
- HDOJ 2647 Reward 【逆拓扑排序+分层】
题意:每一个人的基础工资是888. 因为一部分人要显示自己水平比較高,要求发的工资要比其它人中的一个人多.问你能不能满足他们的要求,假设能的话终于一共要发多少钱,假设不能就输出-1. 策略:拓扑排序. ...
- Leetcode207--->课程表(逆拓扑排序)
题目: 课程表,有n个课程,[0, n-1]:在修一个课程前,有可能要修前导课程: 举例: 2, [[1,0]] 修课程1前需要先修课程0 There are a total of 2 courses ...
- Reward HDU - 2647
传送门 Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to dis ...
- 逆拓扑排序 HDU2647Reward
这个题如果用邻接矩阵的话,由于n比较大,会超内存,所以选用邻接表的形式.还有就是这个题有那个等级的问题,一级比一级的福利高,所以不能直接拓扑排序,而是反过来,计算出度,找出度为0的顶点,然后更新出度数 ...
- 拓扑排序 --- hdu 4948 : Kingdom
Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- hdu2647 逆拓扑,链式前向星。
pid=2647">原文地址 题目分析 题意 老板发工资,可是要保证发的工资数满足每一个人的期望,比方A期望工资大于B,仅仅需比B多1元钱就可以.老板发的最低工资为888元.输出老板最 ...
- POJ3687.Labeling Balls 拓扑排序
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13201 Accepted: 3811 Descr ...
- PKU 3687 Labeling Balls(拓扑排序)
题目大意:原题链接 给出N个未编号的质量各不相同的球,以及它们质量轻重的大小关系,给它们从1-N贴标签编号,无重复.问是否存在可行的编号方法,不存在输出-1, 如果存在则输出唯一一种方案,此方案是使得 ...
- ACM: hdu 2647 Reward -拓扑排序
hdu 2647 Reward Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
随机推荐
- void指针和数组指针之间的转换
由于void* 可以被任何指针赋值,所以以void*作为函数参数可以使得接口更容易接受不同类型的参数,不过需要注意的时,实际操作时还需要利用强制类型转换,将指针转换为原类型,否则在内存上会有问题. 一 ...
- 循序渐进地聊一聊 box-shaow
影子在现实生活中可以是一个物体的副本,在 CSS 中也是这样的,相当于复制了那个元素(并不是真正的元素,对页面布局没有任何影响),可以从下面的代码中看出来. .container { width: 1 ...
- flex弹性盒子实现微博页面
结果图: 源代码: html部分: <!DOCTYPE html><html lang="en"><head> <meta charset ...
- 渗透测试-IP相关知识整理
IP地址: 英文名称为Internet Protocol Address,是指互联网协议地址又称为网际协议地址.IP地址是Ip协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台机器分配一个 ...
- adt-bundle环境搭建(Win7+Win10)
一.adt-bundle安装包 安装包的下载地址:http://tools.android-studio.org/index.php/adt-bundle-plugin 链接中包含有windows. ...
- [模板] dijkstra (堆优化)
复杂度O(mlogn) 输入起点s,可以得到从起点到各点的最短路距离数组dis[i] 过程: 1.初始化:清空标记数组,初始化距离数组设为inf,起点距离设为0,开优先队列,搜索起点 2.搜索:取出队 ...
- Layui+Servlet+MyBatis+Mysql实现的大学生创新竞赛管理平台
项目简介 项目来源于:https://gitee.com/fly-liuhao/SCMS 原仓库中未上传jar包及登录异常,现将修改过的源码上传到百度网盘上. 链接:https://pan.baidu ...
- 算法修炼之路——【链表】Leetcode24 两两交换链表中的节点
题目描述 给定一单链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是简单的改变节点内部的值,而是需要实际的进行节点交换. 示例: 输入:head = [1, 2, 3, 4] 输出:hea ...
- SpringCloud服务的注册发现--------consul实现服务与发现
1,consul也可以替代Eureka实现注册和发现的功能,即注册中心. 之前在linux环境通过consul + upsync + nginx 实现nginx 的动态负载均衡 https://www ...
- POJ旅行商问题——解题报告
旅行商问题 总时间限制: 1000ms 内存限制: 65536kB 描述 某国家有n(1<=n<=10)座城市,给定任意两座城市间距离(不超过1000的非负整数).一个旅行商人希望访问每座 ...