hdu 2647 (拓扑排序 邻接表建图的模板) Reward
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647
老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员工的奖金多,老板满足了所以员工的这种心思,而且老板下午发的总工资最少,问最少是多少?比如 a b 表示a的工资比b要高(高一块钱),当出现a b b c c a这种环的时候输出-1
拓扑排序http://www.cnblogs.com/tonghao/p/4721072.html
小指向大
邻接表建图
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e4 + ;
int head[M],into[M],n,m,cas,money[M];
struct Edge{
int to; //表示一条边上的大的结点(因为小指向大)编号
int next; //表示边的编号
}edge[M*];//注意为两倍 void init()
{
for (int i= ; i<=n ; i++){
head[i]=-;
into[i]=;
money[i]=;
}
} void addedge(int u(小),int v(大))//小指向大
{
edge[cas].to=v; //表示第cas条边的小的结点为v
edge[cas].next=head[u]; //表示上一条以u为起点的边的编号,就是假设一个点有多个出度
head[u]=cas++; //表示结点u所在的边的编号
into[v]++; //入度
} int topu()
{
queue<int>que;
int num=,sum=;
for (int i= ; i<=n ; i++)
if (into[i]==)
que.push(i);
while (!que.empty()){
int u=que.front();
sum+=money[u];
que.pop();
num++;
for (int i=head[u] ; i!=- ; i=edge[i].next){
into[edge[i].to]--;
if (into[edge[i].to]==){
que.push(edge[i].to);
money[edge[i].to]=money[u]+;
}
}
}
if (num!=n) return -;
return sum;
} int main()
{
while (~scanf("%d%d",&n,&m)){
init();
cas=;
while (m--){
int a,b;
scanf("%d%d",&a,&b);
addedge(b,a);
}
printf("%d\n",topu());
}
return ;
}
vector建图的表示,其实差不多
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e4 + ;
int a[M],into[M],money[M],n,m;
vector<int>q[M]; int topu()
{
memset(into,,sizeof(into));
for (int i= ; i<=n ; i++)
for (int j= ; j<q[i].size() ; j++)
into[q[i][j]]++;
queue<int>que;
int cnt=,sum=;
for (int i= ; i<=n ; i++)
if (into[i]==)
que.push(i);
while (!que.empty()){
int u=que.front();
que.pop();
cnt++;
sum+=money[u];
for (int i= ; i<q[u].size() ; i++){
int v=q[u][i];
into[v]--;
if (into[v]==) {
que.push(v);
money[v]=money[u]+;
}
}
}
if (cnt!=n) return -;
return sum;
} int main()
{
while (~scanf("%d%d",&n,&m)){
for (int i= ; i<=n ; i++) {
q[i].clear();
money[i]=; }
while (m--){
int a,b;
scanf("%d%d",&a,&b);
q[b].push_back(a);
}
printf("%d\n",topu());
}
return ;
}
hdu 2647 (拓扑排序 邻接表建图的模板) Reward的更多相关文章
- HDU 2647 拓扑排序
题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...
- hdu 2647拓扑排序 容器
#include<stdio.h> #include<queue> #include<vector> #include<iostream> using ...
- hdu 2647拓扑排序 结构体模拟容器
#include<stdio.h> #include<queue> #include<iostream> using namespace std; #define ...
- hdu 4324 拓扑排序
题意:给出一堆人的喜爱关系,判断有没有三角恋-_-|| 其实就是判断是否存在三条边的环. 一开始我是这么想的: 先拓扑排序,如果没有环那就直接No 如果有环?挑出环里的任意一个点(拓扑排序结束后不在拓 ...
- HDU 4857 拓扑排序 优先队列
n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...
- PTA 邻接表存储图的广度优先遍历(20 分)
6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...
- QDUOJ 生化危机 邻接表存图+BFS
生化危机 发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...
随机推荐
- css样式中的绝对路径的参考对象
如果div标签中没有position:absolute;样式,那么img的参考对象就是浏览器 如果div标签中有position:absolute;样式,那么img的参考对象就是父元素,即div标签
- Linux初学时的一些常用命令(4)
1. 磁盘 查看当前磁盘使用情况 df -h 查看某个文件大小 du -sh 文件名 如果不输入文件名,默认是当前目录的所有文件之和,即当前目录大小 2. 系统内存 free 参数详解:https:/ ...
- Winform 各种属性、方法、控件
窗体是程序与用户交互的可视界面,窗体也是对象,窗体类定义了生成窗体的模版,实例化一个窗体类就产生了一个窗体. .NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有 ...
- Excel 整个列数字转换成文本
选中该列----数据---分列----下一步---到步骤三----列数据格式---勾选"文本"---完成.
- hashcode() equals()
介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? ...
- cacti报ERROR: unknown option '--border' 解决方法
cacti制图报下面提示 if (isset($rrdborder) && $rrdversion >= 1.4) { $graph_opts .= "--border ...
- 搭建ssm环境
在eclipse下搭建ssm框架. 1.新建maven项目. 2.添加jar包依赖 3.修改web.xml配置文件 <?xml version="1.0" encoding= ...
- Ubantu和CentOS设置静态ip
Ubantu设置ip: 1.sudo vim /etc/NetworkManager/NetworkManager.conf 将false改成true 2.修改配置文件/etc/network/int ...
- 使用Jmeter(三十)针对ActiveMQ JMS POINT TO POINT压力测试(转载)
转载自 http://www.cnblogs.com/yangxia-test 准备工作 针对JMS类型的Sampler,需要额外的jar包(这里用的是apache ActiveMQ,将下载的AMQ ...
- Python基础之初始编码
前言 程序中的编码问题你不搞明白,那么你的程序生涯中它会像幽灵一样伴随着你的职业生涯. 首先要搞清楚一个概念:计算机中认识什么?它认识的是010101这种二进制,却不认识中文不认识英文 那么,这个时候 ...