hdu 1224 最长路
开始用dijkstra直接求,发现不行,算法问题(1-2,(30),2-4(20),1--3(10),3--4(100)最后一个点无法更新,导致错误),后用取负,加大数法也没过。
现在(寒假了):求负权的(无负环),或者最长路(一样,取负求最短),不可以dijkstra,用 spfa可以
#include<iostream> //spfa
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int a[200][200];int point[200];int pre[200];int mark[200];int d[200];
const int inf=0x3f3f3f3f;
int main()
{
int t;
cin>>t;
int i;
for(int ii=1;ii<=t;ii++)
{
int n,m;
memset(a,0x3f,sizeof(a));
memset(d,0x3f,sizeof(d));
memset(point,0,sizeof(point));
memset(pre,0,sizeof(pre));
memset(mark,0,sizeof(mark));
cin>>n;
for(i=1;i<=n;i++)
{
scanf("%d",&point[i]);
}
point[n+1]=0;
cin>>m;
int s,l;
for(i=1;i<=m;i++)
{
scanf("%d%d",&s,&l);
a[s][l]=-point[l];
}
bool flag=1;
d[1]=0;
int cur=1;
mark[cur]=1;
queue<int>q;
q.push(1);
while(!q.empty())
{
int cur=q.front();
q.pop();
for(i=1;i<=n+1;i++)
{
if(mark[i]==0&&d[cur]+a[cur][i]<d[i]) //可以松弛的要入队
{
q.push(i);
pre[i]=cur;
}
if(d[cur]+a[cur][i]<d[i]) //对所有的能松弛的松弛
d[i]=d[cur]+a[cur][i];
} }
if(d[n+1]==inf) //防止出现无法到达
{
printf("CASE %d#\npoints : %d\n",ii,d[n+1]);
printf("circuit : 1->1");
if(ii==t)cout<<endl;
else cout<<endl<<endl;
continue;
} int bb[205];int kk=n+1;int yy=1;
while(pre[kk]!=1)
{
bb[yy++]=pre[kk];
kk=pre[kk];
}
yy--;
bb[0]=1;
printf("CASE %d#\npoints : %d\n",ii,-d[n+1]);
printf("circuit : 1");
for(i=yy;i>=0;i--)
printf("->%d",bb[i]);
if(ii==t)cout<<endl;
else cout<<endl<<endl;
}
return 0;
}
hdu 1224 最长路的更多相关文章
- hdu 1224 Free DIY Tour(最长的公路/dp)
http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- HDU 6201 transaction transaction transaction(拆点最长路)
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- [HDU 1317]XYZZY[SPFA变形][最长路]
题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...
- hdu 4123 树的最长路+RMQ
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2196 Computer (树上最长路)【树形DP】
<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...
- HDU.1529.Cashier Employment(差分约束 最长路SPFA)
题目链接 \(Description\) 给定一天24h 每小时需要的员工数量Ri,有n个员工,已知每个员工开始工作的时间ti(ti∈[0,23]),每个员工会连续工作8h. 问能否满足一天的需求.若 ...
- HDU - 6201:transaction transaction transaction(最长路)
Kelukin is a businessman. Every day, he travels around cities to do some business. On August 17th, i ...
随机推荐
- CPP-基础:关于多态
类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visua ...
- 网络流的$\mathfrak{Dinic}$算法
网络流想必大家都知道,在这不过多赘述.网络流中有一类问题是让你求最大流,关于这个问题,许多计算机学家给出了许多不同的算法,在这里--正如标题所说--我们只介绍其中的一种--\(\tt{Dinic}\) ...
- Python IDE推荐
八个最佳Python IDE 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Python是一种功能强大.语言简洁的编程语言.本文向大家推荐8个适合pyt ...
- iOS开发--使用OpenSSL生成私钥和公钥的方法
最近要在新项目中使用支付宝钱包进行支付,所以要调研对接支付宝的接口,支付宝开放平台采用了RSA安全签名机制,开发者可以通过支付宝 公钥验证消息来源,同时可使用自己的私钥对信息进行加密,所以需要在本 ...
- vuex其实超简单,只需3步
前言 之前几个项目中,都多多少少碰到一些组件之间需要通信的地方,而因为种种原因,event bus 的成本反而比vuex还高, 所以技术选型上选用了 vuex, 但是不知道为什么,团队里的一些新人一听 ...
- JS中关于clientWidth offsetWidth scrollWidth 等的含义的详细介绍
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- 我的Python分析成长之路10
matplot数据可视化基础 制作提供信息的可视化(有时称作绘图)是数据分析中最重要任务之一. 1.图片(画布)与子图 plt.figure :创建一张空白的图片,可以指定图片的大小.像素. figu ...
- shell-code-3-echo用法&printf用法
××××××××××××××××××××××××××××××下面是echo××××××××××××××××××××××××××××××× # read 命令从标准输入(即执行时,键盘的输入)中读取一行 ...
- java 邮箱验证
1.需要加入发送邮件的mail.jar: http://www.oracle.com/technetwork/java/javamail/index-138643.html 2.将字符串通过MD5进行 ...
- vs系列自带的localdb数据库当做数据库
我在学习mvc4框架的时候,因为是笔记本,觉得装了一个vs就很大了,再装一个sql server 就更麻烦,因此,就想到使用vs自带的localDB,直接生成预览的时候是没有问题的,但是当把mvc4的 ...