Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)

摘要:
想法:因为它是一个有向无环图,所以最长的路径必须是入口度为0到出口度为0的路径。拓扑顺序可以在确定当前点之前考虑其所有条件,因此可以取最后一个值。

参考博客(感谢博主):http://blog.csdn.net/yo_bc/article/details/77917288

Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)第1张

Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)第2张

题意:

给定一个有向无环图,求该图的最长路。

思路:

由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int inf=0x3f3f3f3f;
 4 const int maxn=1e4+5;
 5 const int maxm=1e5+5;
 6 struct Node
 7 {
 8     int v,w,next;
 9 }edge[maxm];
10 int no,head[maxn];
11 int t,n,m;
12 int deg[maxn],val[maxn];
13 queue<int>q;
14 
15 void init()
16 {
17     no=0;
18     memset(head,-1,sizeof(head));
19     memset(deg,0,sizeof(deg));
20     memset(val,0,sizeof(val));
21 }
22 
23 void topsort()
24 {
25     while(!q.empty()) q.pop();
26     for(int i=1;i<=n;i++)
27         if(!deg[i]) q.push(i);
28     int ans=0;
29     while(!q.empty())
30     {
31         int u=q.front();q.pop();
32         for(int k=head[u];k+1;k=edge[k].next){
33             int v=edge[k].v;
34             val[v]=max(val[v],val[u]+edge[k].w);
35             if(--deg[v]==0) q.push(v);
36         }
37     }
38         cout<<*max_element(val+1,val+1+n)<<endl;
39 
40 }
41 
42 int main()
43 {
44     for(cin>>t;t--;)
45     {
46         cin>>n>>m;
47         init();
48         for(int i=1;i<=m;i++){
49             int u,v,w;
50             cin>>u>>v>>w;
51             edge[no].v=v;edge[no].w=w;
52             edge[no].next=head[u],head[u]=no++;
53         }
54         topsort();
55     }
56     return 0;
57 }

免责声明:文章转载自《Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇循环-17. 简单计算器(20)ant打包报错 JRE version less than 1.8 is not suppored下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

GitHub怎样fork别人的代码到自己仓库并进行贡献

在fork完成其他人的代码后,它也在自己的帐户下拥有该项目,然后将其克隆到自己的计算机上。然后它可以通过gitclone命令修改项目。但是,不建议直接在主分支上修改项目。最好在主分支的基础上剪切一个dev分支,然后在dev分支上修改它。修改后,将dev分支合并到master分支。...

uniApp之 顶部选项卡

为了在uniapp插件中创建类似于信息应用程序模板的功能,使用了官方的组件刷。起初,它无法滚动。后来,我看了一下官方网站,说有必要添加“滚动视图”标签,以记录第一次使用uniapp的应用程序。首先,在顶部制作一个选项卡,因为我只有两个项目,所以我将它们直接写入视图标记中{item.label}}然后编写以下内容。单击和滑动可以切换选项卡,所选样式:curre...

前端chrome浏览器调试总结

以下选项允许您选择要捕获的项目。...

禅道从windows迁移到linux

windows下图片路径/zentao/www/data/upload/1备份到Linux下路径/opt/zbox/app/zentao/www/data/upload/1二、Linux下安装禅道注意一定要安装相同版本的禅道2.1、安装禅道有很多方法,禅道官网也有详细说明,这里主要讲linux用一键安装包及遇到的问题2.2、下载安装包禅道官网下载界面很乱,大...

Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在

您可以看到ELDict类中有一个引用:importjavax。xml。绑定注释XmlAttribute;虽然未使用,但它会导致mvn编译错误。在在线绑定中搜索“包javax.xml.bind.nannotation不存在”。结果是:包javax。xml。bind Annotation不存在-CSDN论坛2009年12月2日·无法编译使用jaxb的类,因为软件...

js 预览 excel,js-xlsx的使用

js-xlsx简介SheetJS生成的js-xls x是一个非常方便的工具库,只能使用纯js读取和导出excel。它功能强大,支持多种格式,支持xls、xlsx和ods等十几种格式。本文以xlsx格式为例。官方github:https://github.com/SheetJS/js-xlsx支持演示在线演示地址:http://demo.haoji.me/20...