hdoj 1385Minimum Transport Cost
卧槽。。。。最近刷的cf上有最短路,本来想拿这题复习一下。。。。
题意就是在输出最短路的情况下,经过每个节点会增加税收,另外要字典序输出,注意a到b和b到a的权值不同
然后就是处理字典序的问题,当松弛时发现相同值的时候,判断两条路径的字典序
代码
#include "stdio.h"
const int MAXN=110;
const int INF=10000000;
bool vis[MAXN];
int pre[MAXN];
int cost[MAXN][MAXN],lowcost[MAXN],b1[MAXN];
int road[MAXN];
using namespace std;
int cmp(int a,int b,int c)
{
int i,len1,len2,j;
int p1[MAXN],p2[MAXN];
int cur=a;
pre[a]=b;
len1=0;
while(cur!=-1)
{
p1[len1++]=cur;
cur=pre[cur];
}
len2=0;
cur=a;
pre[a]=c;
while(cur!=-1)
{
p2[len2++]=cur;
cur=pre[cur];
}
for(i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)
{
if(p1[i]>p2[j])
return c;
if(p1[i]<p2[j])
return b;
}
if(i==-1)
return b;
if(j==-1)
return c;
}
void dijkstra(int beg,int n)
{
int ans;
int k=0;
for(int i=0; i<n; i++)
{
lowcost[i]=cost[beg][i];
vis[i]=false;
pre[i]=-1;
}
for(int j=0; j<n; j++)
{
int k;
int min=INF;
for(int i=0; i<n; i++)
if(!vis[i]&&lowcost[i]<min)
{
min=lowcost[i];
k=i;
}
if(k==-1)
break;
vis[k]=true;
for(int i=0; i<n; i++)
{
if(cost[k][i]==INF) continue;
if(!vis[i]&&lowcost[k]+cost[k][i]+b1[k]<lowcost[i])
{
lowcost[i]=lowcost[k]+cost[k][i]+b1[k];
pre[i]=k;
}
else if(!vis[i]&&lowcost[k]+cost[k][i]+b1[k]==lowcost[i])
pre[i]=cmp(i,pre[i],k);
}
}
}
void print(int cur)
{
if(pre[cur]!=-1)
print(pre[cur]);
printf("-->%d",cur+1);
}
int main()
{
int n,i,j;
int a,b,c;
int ans,len;
while(scanf("%d",&n)==1,n)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&cost[i][j]);
if(cost[i][j]==-1)
cost[i][j]=INF;
}
}
for(i=0; i<n; i++)
scanf("%d",&b1[i]) ;
while(scanf("%d%d",&a,&b)==2)
{
if(a==-1&&b==-1)
break;
a-=1;
b-=1;
len=0;
dijkstra(a,n);
ans=lowcost[b];
printf("From %d to %d :\nPath: %d",a+1,b+1,a+1);
if(a!=b)
print(b);
printf("\n");
printf("Total cost : %d\n\n",ans);
}
}
return 0;
}
这里有一个小插曲,这题和zoj某题一样,搜索hdoj题号,出来的是floyd和dij上面暴力的解法,搜索zoj题号,出来的是dij+dfs解法,引人深思。。。
hdoj 1385Minimum Transport Cost的更多相关文章
- HD1385Minimum Transport Cost(Floyd + 输出路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- HDU 1385 Minimum Transport Cost (Dijstra 最短路)
Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...
- Minimum Transport Cost(floyd+二维数组记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- NSOJ Minimum Transport Cost
These are N cities in Spring country. Between each pair of cities there may be one transportation tr ...
- ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)
题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...
- HDU1385 Minimum Transport Cost (Floyd)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- hdu1385Minimum Transport Cost(最短路变种)
题目链接: huangjing 思路: 输出路径的最短路变种问题..这个题目在于多组询问.那么个人认为用floyd更加稳妥一点.还有就是在每一个城市都有过路费,所以在floyd的时候更改一下松弛条件就 ...
- hdu 1385 Minimum Transport Cost(floyd && 记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- Minimum Transport Cost Floyd 输出最短路
These are N cities in Spring country. Between each pair of cities there may be one transportation tr ...
随机推荐
- 获得本机IP,并且将ip放在CIpAdress里
char szHostName[MAX_PATH + 1]; gethostname(szHostName, MAX_PATH); //得到计算机名 hostent *p = gethostbynam ...
- ubuntu安装
今天在win10下安装Ubuntu,结果没经验导致win10找不回来了,我再好好整理些思路 安装前要做一个ghost,万一出现问题可以用来恢复系统! 1,我使用USB Installer 在http: ...
- [Python]实现简单决策树
基本思路: 通过香农熵来决定每一层使用哪一种标签做分类,分类后,通过多数表决法来决定该层两个节点的类别.每次消耗一个标签,所以一共需要递归"标签个数"层. # -*- coding ...
- background-position (转)
http://blog.csdn.net/JeamKing/article/details/5617088 注:这是别人博客链接地址 具体效果图片可以查看此链接 语法:background-po ...
- (译)关于async与await的FAQ
传送门:异步编程系列目录…… 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的API及性能提升,另外关键字”async” ...
- Less2css error 终极解决方案(转载)
用到less时遇到的问题 ,然后复制过来的 使用sublime Text3 的时候,安装less2Css后,和很多人一样以为大功告成,开始要运行编译less文件,结果开始发现 于是乎开始搜索问题和解决 ...
- 【开园 and 计划】
开园 啊啊啊啊啊啊啊啊,郁闷啊,头一回写博客,一刻钟前保存的草稿为何荡然无存??? 那少废话直击要点:今日乃我开园之日,开园为了改变.为了学习.为了积累. 计划 最长为时 3月,截止到 2016年9月 ...
- ANdroid URL
1 Android开源项目和工具分类 http://blog.csdn.net/shimiso/article/details/40889361 2 分享45个android实例源码 http://w ...
- 转-阿里云CentOS Linux服务器上用postfix搭建邮件服务器
http://www.cnblogs.com/dudu/archive/2012/12/12/linux-postfix-mailserver.html 注:本文的邮件服务器只用于发送邮件,也就是ST ...
- IntrospectorCleanupListener作用
<!--web.xml--><listener> <listener-class>org.springframework.web.util.Introspector ...