图论之初,拓扑排序、前向星(通过存储边来存储图)加优先队列对拓扑的优化-----hdu1285
确定比赛名次
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24193 Accepted Submission(s): 9763
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
4 3
1 2
2 3
4 3
1 2 4 3
拓扑
#include<queue>
#include<stack>
#include<math.h>
#include<stdio.h>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std;
#define MAX 520
int map[MAX][MAX]; //邻接矩阵
int indegree[MAX]; //入度
void toposort(int map[MAX][MAX],int indegree[MAX],int n)
{
int i,j,k=0;
for(i=1; i<=n; i++) //遍历n次
{
for(j=1; j<=n; j++) //出入度为0的节点
{
if(indegree[j]==0)
{
printf("%d%c", j, i == n ? '\n' : ' ');
indegree[j]--;
k=j;
break;
}
}
for(j=1; j<=n; j++) //删除与该节点关联的边
if(map[k][j]==1)
{
map[k][j]=0;
indegree[j]--;
}
}
}
int main()
{
int n,m; //n:关联的边数,m:节点数
while(scanf("%d %d",&n,&m)==2&&n!=0)
{
int i;
int x,y;
memset(map,0,sizeof(map));
memset(indegree,0,sizeof(indegree));
for(i=1; i<=m; i++)
{
scanf("%d %d",&x,&y);
if(!map[x][y])
{
map[x][y]=1;
indegree[y]++;
}
}
toposort(map,indegree,n);
}
return 0;
} 前向星(用存储边的方式存储图)加优先队列实现排序,列题在hdu 1285
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
using namespace std;
const int INF = 1e9+7;
const int VM = 503;// 点的个数
struct node //前向星的结构体
{
int v;//输队编号
int next;
};
node edge[VM * 4];//结构体数组
int head[VM];//头指针数组
int cnt;//下标
int deg[VM];//入度数组
void toposort(int n)
{
priority_queue<int, vector<int>, greater<int> > que;//优先队列
for (int i = 1; i <= n; i++)//找所有点
if (deg[i] == 0) //入度为 0
{
que.push(i);//加入队列
deg[i]--;//入度 变为 -1
}
int k = 1;
while (!que.empty()) //队列不为空
{
int u = que.top();//取出队首的数
que.pop();//删除
printf("%d%c", u, k++ == n ? '\n' : ' ');//输出
for (int i = head[u]; i != -1; i = edge[i].next) //与该点相连的
{
node e = edge[i];//便于书写
deg[e.v]--;//点的入度 -1
if (deg[e.v] == 0)//若此点的 入度为 0
que.push(e.v);//放入队列
}
}
}
int main()
{
int n, m;
int i;
while (scanf("%d %d", &n, &m) == 2) //多组输入,获取n,m
{
memset(head, -1, sizeof(head));//初始化
memset(deg, 0, sizeof(deg));//初始化
cnt = 0;//初始化
while (m--)
{
int u, v;
scanf("%d %d", &u, &v);//获取u,v
for (i = head[u]; i != -1; i = edge[i].next)//查找重边
if (edge[i].v == v)//输入重复数据
break;//不再储存
if (i == -1) //若不是重复数据
{
deg[v]++;//加度
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
}
toposort(n);//调用函数
}
return 0;
}
图论之初,拓扑排序、前向星(通过存储边来存储图)加优先队列对拓扑的优化-----hdu1285的更多相关文章
- 拓扑排序入门详解&&Educational Codeforces Round 72 (Rated for Div. 2)-----D
https://codeforces.com/contest/1217 D:给定一个有向图,给图染色,使图中的环不只由一种颜色构成,输出每一条边的颜色 不成环的边全部用1染色 ps:最后输出需要注意, ...
- 拓扑排序--UVa10305
题目 Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortun ...
- UVA 1572 Self-Assembly(拓扑排序)
1 // 把一个图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面. 2 // 在图论中,这个问题称为拓扑排序.(toposort) 3 // 不难发现:如果图中存在有向环,则不存在拓 ...
- P4017 最大食物链计数 (拓扑排序)
看到拓扑排序感觉非常遥远的复杂,不喜欢图.看了拓扑排序的原理,很像广搜. 以本题样例为例: 了解一下 出度 和 入度 5的出度为3 入度为 0 ,3的出度为2 入度为2…… for循环 找到秃头 5 ...
- hiho一下 第四十七周 拓扑排序一 【静态数组链式前向星存储结构实现 + 拓扑跳出 】
题目1 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么 ...
- 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)
图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...
- poj3249【拓扑排序】
//题意: 给出一个有向无环图,每个顶点都有一个权值. // 求一条从入度为0的顶点到出度为0的顶点的一条路径, // 路径上所有顶点权值和最大. //我觉得只要明 ...
- HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)
逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ...
- 使用 C# 代码实现拓扑排序
0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. https://www.codeproject.com/Articles/869059/Topological-sorti ...
随机推荐
- Python学习笔记(九)返回函数
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318352367 ...
- 51nod1773 A国的贸易
基准时间限制:2 秒 空间限制:524288 KB 分值: 40 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...
- wampserver 虚拟主机
转载:http://blog.csdn.net/knight_quan/article/details/51830683 1.背景: 在进行网站开发的时候,通常需要以http://localhost或 ...
- js刷题:leecode 25
原题:https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意就是给你一个有序链表.如1->2->3->4->5,还 ...
- CMDB概述(一)
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- PHP 5 MySQLi 函数总结
连接数据库 mysqli_connect() 函数打开一个到 MySQL 服务器的新的连接. <?php $con=mysqli_connect("localhost",&q ...
- 64_p8
python2-cotyledon-tests-1.6.7-2.fc26.noarch.rpm 12-Feb-2017 10:28 23182 python2-couchdb-1.0-6.fc26.n ...
- gradle-4.1-rc-1-all.zip gradle-4.1-rc-2-all.zip 免费下载(百度网盘)
今天下载遇到官网不给力,给有需要的你 gradle-4.1-rc-1-all.zip 密码: uyey gradle-4.1-rc-2-all.zip 密码: txhh
- springboot + swagger2 生成api文档
直接贴代码: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-sw ...
- 在Ubuntu上安装Redis MySQL MongoDB memcached Nginx
1.安装Redis sudo apt-get install redis-server 2.安装MySQL sudo apt-get install mysql-server 3.安装MongoDB ...