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 ...
随机推荐
- for..in...时,注意hasOwnProperty验证
for..in...时,注意hasOwnProperty验证 var obj = { a: 10, b: 20 }; // 注意词句代码 Object.prototype.c = 30; var it ...
- bootstrap历练实例:复选框或单选按钮作为输入框组的前缀或后缀
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- ios之UISplitViewController
iPad的屏幕比iPhone大,所以在界面上,iPad比iPhone多一个UISplitViewController,用来实现iPad在横屏时,分两栏显示所需要的界面,可以一边是目录一边是具体的内容. ...
- OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎
本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...
- Web框架之Django_10 重要组件(Auth模块)
一.auth模块介绍 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等 ...
- centos 7.3安装教程
进入安装初始化界面 等待检查完就可以进入安装了,不想等待的按ESC退出,没关系的 语言这里我们推荐使用英文: 然后点击Continue继续 选择-系统SYSTEM-安装位置INSTALLTION DE ...
- cs229_part7
PCA 问题背景 回顾一下我们特征选择中的问题.如果特征非常多,而且有一些特征是重复的,那么我们可以想办法剔除掉一些无用的特征.那里我们提到一个计算互信息的方法.那么这里换一种降维方法. 比如说这样的 ...
- Linux文件管理类命令及命令别名
文件查看类命令: cat: tac: 从文件尾部开始显示 分屏显示: more [option] 文件名: 查看至文件尾部会退出 空格为翻页 less [option] 文件名: 查看至文件尾部不退出 ...
- Debian7安装msf
安装metasploit curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templa ...
- pycharm中脚本执行的3种模式(unittest框架、pytest框架、普通模式)
背景知识,某次使用HTMLTestRunner的时候,发现一直都无法导出报告,后来查询资料发现了一些坑,现在整理一下来龙去脉. 一:pycharm默认的是pytest框架去执行unittest框架的测 ...