题目链接:

https://cn.vjudge.net/problem/1137733/origin

拓扑排序的基本思想:

https://blog.csdn.net/qq_41713256/article/details/80805338

其实拓扑排序的基本思想不断分离节点,一直到分离完为止。其要求在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。

具体操作是:

  step1:统计所有节点的入度。

  step2:对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。

  step3:一直做改操作,直到所有的节点都被分离出来。

而这道题的意思就是要求你找到一个长度最小的通路。

下面是这道题的AC代码:

#include <bits/stdc++.h>

using namespace std;
const int MX = +;
int mp[MX][MX];
int vis[MX]; int main()
{
int ans = ;
int n, m;
scanf("%d%d", &n, &m);
for(int i = ; i <= m; ++i) //初始化
{
int x, y;
scanf("%d%d", &x, &y);
vis[x]++; vis[y]++; //统计度数
mp[x][y] = mp[y][x] = ;
}
while(true)
{
bool flag = true; // 用于判断是否结束
int pos = ;
for(int i = ; i <= n; ++i)
{
if(vis[i] == ) //当度数是1时需要把它分离出来!
{
ans++;
pos = i;
flag = false; // 仍有度数的点,故不可结束循环
vis[i]--;
break;
}
}
if(flag) break; // 若没有有度数的点则循环结束
for(int i = ; i <= n; ++i)
{
if(mp[pos][i] == ) //根据拓扑排序该点连的另外一边也度数减一
{
vis[i]--;
}
}
}
printf("%d\n", ans);
}

题解在代码间,有疑问可以在评论区留言

拓扑排序 --- AtCode - 3596的更多相关文章

  1. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  2. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  3. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  4. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  5. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  6. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  7. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

  8. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  9. *HDU1285 拓扑排序

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. Linux基础实操二

    实操一: 1) 新建用户natasha uid为1000,gid为555,备注信息为“master” 2) 修改natasha用户的家目录为/Natasha 3) 查看用户信息配置文件的最后一行 ca ...

  2. Penetration testing _internal & wireless Penetration Testing

    第一部分 渗透测试步骤 ---参考资料  Ethical Hacking: The Value of Controlled Penetration Tests  下载地址  链接:https://pa ...

  3. Metasploit

    1.启动Metasploit 声明:本次渗透测试的主机是我自己在自己的攻击主机上搭建的另一个操作系统,为了真实性设置了常见的IP地址,如有重合但绝对不是任何实体公司或者单位的IP地址. 所以不承担任何 ...

  4. bzoj2200拓扑排序+最短路+联通块

    自己写的不知道哪里wa了,明明和网上的代码差不多.,. /* 给定一张图,有的边是无向边,有的是有向边,有向边不会出现在环中,且有可能是负权值 现在给定起点s,求出s到其余所有点的最短路长度 任何存在 ...

  5. 右键菜单添加打开CMD选项

    转载: https://www.cnblogs.com/mkdd/p/8649139.html#undefined 目前用的win7sp1系统,平时打开CMD窗口通常用三种方法:1.win+R然后输入 ...

  6. inline namespace

    无意中看到C++11中的新特性inline namespace, 先附上官方的解释 Inline namespace The inline namespace mechanism is intende ...

  7. Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...

  8. Ajax 异步局部刷新

    Ajax 异步局部刷新 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页 ...

  9. SQL Server索引的执行计划

    如何知道索引有问题,最直接的方法就是查看执行计划.通过执行计划,可以回答表上的索引是否被使用的问题. (1)包含索引:避免书签查找 常见的索引方面的性能问题就是书签查找,书签查找分为RID查找和键值查 ...

  10. VS2015 将*.xaml.cs文件包裹在*.xaml文件下

    原文:https://stackoverflow.com/questions/13387527/add-existing-xaml-files-to-visual-studio-2012 Right- ...