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 ...
随机推荐
- springboot上传linux文件无法浏览,提示404错误
1.配置文件地址置换 @Componentclass WebConfigurer implements WebMvcConfigurer { @Autowired ConfigUtil bootdoC ...
- 八 个优秀的 jQuery Mobile 教程
jQuery Mobile 是 jQuery 在手机上和平板设备上的版本.jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架.虽然j ...
- Bootstrap历练实例:响应式导航栏
响应式的导航栏 为了给导航栏添加响应式特性,您要折叠的内容必须包裹在带有 classes .collapse..navbar-collapse 的 <div> 中.折叠起来的导航栏实际上是 ...
- javase(10)_多线程基础
一.排队等待 1.下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 ― 打印机.磁盘.数据库和显示屏 -- 由于硬件 ...
- ios之自定义导航栏上的返回按钮
导航栏的按钮,右边的按钮是可以自己随意添加的.但左边的返回按钮怎么定制?你会说,添加一个自己的按钮呗!你可以试试看,这样行不行. 正确的答案是重载UINavigationController类的pus ...
- 文件读写FILE类
1. 新建一个文件: FILE *f = fopen("a.txt","w+"); (1)fopen()函数介绍fopen的原型是:FILE *fopen(co ...
- Wash!!(HDU_6000)
传送门:Wash! 题意:有n台洗衣机,m台烘干机,给出了每台机器处理意见衣服的时间,而且没见机器同时只能处理一件衣服.问如何选择机器才能使洗完衣服的时间最短. 思路:建两个优先队列,一个表示洗衣机, ...
- ZZULIoj 1913: 小火山的计算能力
Description 别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来. Input 首先是一个t(1<=20)表示测试组数.然后一个表达式,表达式长 ...
- hdu 5878
I Count Two Three Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- tomcat启动后 404 页面无法访问
如果修改端口后还不能访问,先关闭tomcat, 在bin目录下命令 ./shutdown.sh 找到80进程 netstat -an | grep 80 杀死80进程 ps -ef | grep h ...