关闭

ICPC2017网络赛(乌鲁木齐)H: Skiing (SPFA最长路)

标签: icpcspfa最长路
851人阅读 评论(0) 收藏 举报
分类:


H: Skiing

 time limit 1000ms memory limit 131072KB
 
i i
In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort has M different ski paths and N different flags situated at those turning points. The i-th path from the S -th flag to the T -th flag has length L . Each path must follow the principal of reduction of heights and the start point must be higher than the end point strictly. An available ski trail would start from a flag, passing through several flags along the paths, and end at another flag. Now, you should help Bob find the longest available ski trail in the ski resort. Input Format The first line contains an integer T, indicating that there are T cases. In each test case, the first line contains two integers N and M where 0 < N ≤ 10000 and 0 < M ≤ 100000 as described above. Each of the following M lines contains three integers S , T , and L  (0 < L < 1000) describing a path in the ski resort. Output Format For each test case, ouput one integer representing the length of the longest ski trail. Sample Input
1 5 4 1 3 3 2 3 4 3 4 1 3 5 2
Sample Output
6
 

【题意】:

给出一个有向无环图,找一条最长路,输出长度

【解析】:

统计入度为0的点,然后对这些点为起点,跑SPFA,同时记忆化搜索记录每个点的最优值。

【代码】:

#include <stdio.h>
#include <stdlib.h>  
#include <string.h>  
#include <iostream>  
#include <algorithm> 
#include <queue>  
#define mset(a,i) memset(a,i,sizeof(a))
using namespace std;
typedef long long ll;
struct node{
    int to,val,next; 
}e[101010];
int n,m,x,y,val,cnt ; 
int IN[10101],head[10101] ;
ll dis[10101];
queue <int> Q ;
void add(int x,int y,int v)
{
    e[cnt] = (node){ y,v,head[x] } ; 
    head[x] = cnt++; 
}
void SPFA(int s)
{
    int u,v;
    while(!Q.empty())Q.pop();
    Q.push(s);
    while(!Q.empty())  
     {
        u=Q.front() ; 
        Q.pop() ;
        for(int i=head[u];~i;i=e[i].next)
        {
            v=e[i].to;
            if(dis[v]<dis[u]+e[i].val)
            {
                dis[v]=dis[u]+e[i].val;
                Q.push(v);
           }
        }
   }
}
int main() 
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		mset(IN,0);
		mset(head,-1);
		mset(dis,0);
		cnt=0;
		scanf("%d%d",&n,&m) ; 
	    for(int i=1;i<=m;i++)
	    {
	    	scanf("%d%d%d",&x,&y,&val);
			add(x,y,val);
	    	IN[y]++;
		}
	     if(n==1)
	     {
	        printf("0\n");
	        continue;
	    }
	    for(int i=1;i<=n;i++)
	    {
	    	if(IN[i]==0)
	  			SPFA(i);
		}
		ll ans=0;
		for(int i=1;i<=n;i++)
		{
			ans=max(ans,dis[i]);
		}
		printf("%lld\n",ans);
	}
    return 0 ;  
}


0
0
查看评论

计蒜客 Skiing 最长路

In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort has MM different ski paths and NN dif...
  • u013491262
  • u013491262
  • 2017-09-15 13:33
  • 84

计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题Skiing(拓扑序求DAG最长路)

题意: 给定一个有向无环图,求该图的最长路。 思路: 由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可。 代码: #include using namespace std; const int inf = 0x3f...
  • yo_bc
  • yo_bc
  • 2017-09-09 19:50
  • 724

2017乌鲁木齐网络赛 skiing(spfa/bellman最长路模板题)

题意: 给你一个有向图,让你求整个图可以跑出的最长路。 思路: 对每个入度为0的点跑一遍最短路,每次跑都记忆化。最后遍历一遍最大值。 代码: #include using namespace std; typedef long long ll; const int maxm = 1e5+7; c...
  • exp1ore
  • exp1ore
  • 2017-09-12 21:28
  • 59

spfa求最长路

http://poj.org/problem?id=1932 spfa求最长路,判断dist[n] > 0,需要注意的是有正环存在,如果有环存在,那么就要判断这个环上的某一点是否能够到达n点,如果能,就说明可以到达,否则,就说明不能。 1 /*******************...
  • zjsyhjh
  • zjsyhjh
  • 2014-05-26 18:09
  • 737

图算法补充(SPFA,最长路径)

1. SPFA(Shortest Path Faster Algorithm) 1994年,西南交通大学的段凡丁发表了SPFA,SPFA在Bellman-ford algorithm的基础上加上一个队列优化,减少了冗余的松弛操作。关于最短路径的SPFA快速算法:http://www.cnki.co...
  • hz5034
  • hz5034
  • 2015-07-29 19:53
  • 1670

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛J

Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpected places and unexpected people. Now our journ...
  • Little_boy_z
  • Little_boy_z
  • 2017-09-11 20:20
  • 488

hdu3696(spfa求最长路)

链接:点击打开链接 题意:给出n个物品的价值和数量,有m个关系,每种关系的格式为(a0,b1,a1,b2,a2,…,bk-1,ak-1)表示1个ai可以转换成bi+1个ai+1,问最后n个物品转换后的最大价值和 代码:#include #include #include #include ...
  • stay_accept
  • stay_accept
  • 2017-07-02 14:14
  • 164

HDU - 6201 transaction transaction transaction (2017 ACM-ICPC 亚洲区 (沈阳赛区) 网络赛 1008)

transaction transaction transaction Problem Description Kelukin is a businessman. Every day, he travels around cities to do some business. On Augus...
  • lzc504603913
  • lzc504603913
  • 2017-09-11 00:11
  • 315

2017 ICPC 沈阳赛 E。Number

暴力过不了,使用矩阵快速幂,lg(n),重点在于看下快速幂的算法, n>>=1和n/=2的效果相同。
  • m0_38081836
  • m0_38081836
  • 2017-09-13 17:41
  • 152

2017 ACM-ICPC 网络赛 总结

整个九月,就在区域赛网络赛中度过了……8月有多校9月有网络赛,过的十分充实。坚持下来的这两个月,使我提升巨大!成功跨越了一个瓶颈期,现在终于有能力去攻克一些高难度的算法了。平时过得也很开心,最高兴的就是认识了一大堆热爱ACM的小伙伴们。今年大一来了很多大神,希望他们都能坚持下并取得好成绩吧! 我...
  • lzc504603913
  • lzc504603913
  • 2017-09-24 21:47
  • 462
    个人资料
    • 访问:102801次
    • 积分:3009
    • 等级:
    • 排名:第13799名
    • 原创:197篇
    • 转载:9篇
    • 译文:0篇
    • 评论:33条
    博客专栏
    最新评论