Seaside

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1369    Accepted Submission(s): 984
Problem Description
XiaoY is living in a big city, there are N towns in it and some towns near the sea. All these towns are numbered from 0 to N-1 and XiaoY lives in the town numbered ’0’. There are some directed roads connecting them. It is guaranteed that you can reach any town
from the town numbered ’0’, but not all towns connect to each other by roads directly, and there is no ring in this city. One day, XiaoY want to go to the seaside, he asks you to help him find out the shortest way.
 
Input
There are several test cases. In each cases the first line contains an integer N (0<=N<=10), indicating the number of the towns. Then followed N blocks of data, in block-i there are two integers, Mi (0<=Mi<=N-1) and Pi, then Mi lines followed. Mi means there
are Mi roads beginning with the i-th town. Pi indicates whether the i-th town is near to the sea, Pi=0 means No, Pi=1 means Yes. In next Mi lines, each line contains two integers SMi and LMi, which means that the distance between the
i-th town and the SMi town is LMi.
 
Output
Each case takes one line, print the shortest length that XiaoY reach seaside.
 
Sample Input
5
1 0
1 1
2 0
2 3
3 1
1 1
4 100
0 1
0 1
 
Sample Output
2
 

最短路径。话不多说,SPFA,dijkstra,floyd各贡献一枚!

dijkstra:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int map[15][15],dis[1000],vis[1000],target[15];
int N;
void dijkstra()
{
memset(dis,INF,sizeof(dis));
int i,j;
for(i=0;i<N;i++)
{
dis[i]=map[0][i];
vis[i]=0;
}
dis[0]=0;
vis[0]=1;
for(i=0;i<N;i++)
{
int mi=INF,mark=-1;
for(j=0;j<N;j++)
{
if(!vis[j]&&dis[j]<mi)
{
mi=dis[j];
mark=j;
}
}
if(mark==-1)
break;
vis[mark]=1;
for(j=0;j<N;j++)
{
if(!vis[j]&&dis[j]>dis[mark]+map[mark][j])
dis[j]=dis[mark]+map[mark][j];
}
}
}
int main()
{
int n,a,b,d,i,j,m;
while(scanf("%d",&N)!=EOF)
{
int t=0;
memset(map,INF,sizeof(map));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&b);
map[i][a]=map[a][i]=b;
}
}
dijkstra();
int s[15];
for(i=0;i<t;i++)
s[i]=dis[target[i]];
sort(s,s+t);
printf("%d\n",s[0]);
}
return 0;
}

floyd:

#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int target[1000],map[15][15];
int N;
void floyd()
{
int i,k,j;
for(k=0;k<N;k++)
{
for(i=0;i<N;i++)
{
if(map[k][i]==INF)
continue;
for(j=0;j<N;j++)
{
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
int main()
{
int n,i,j,a,d,m;
while(scanf("%d",&N)!=EOF)
{
int t=0;
memset(map,INF,sizeof(map));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&d);
map[i][a]=map[a][i]=d;
}
}
floyd();
int q=INF;
for(i=0;i<t;i++)
q=q>map[0][target[i]]?map[0][target[i]]:q;
printf("%d\n",q);
}
return 0;
}

SPFA:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
int head[20],target[15],vis[20],dis[20];
int N,t,w;
struct node
{
int from,to,weight,next;
}s[1000];
void spfa()
{
memset(vis,0,sizeof(vis));
memset(dis,INF,sizeof(dis));
queue<int> q;
q.push(0);
vis[0]=1;
dis[0]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
dis[0]=0;
for(int k=head[u];k!=-1;k=s[k].next)
{
int v=s[k].to;
if(dis[v]>dis[u]+s[k].weight)
{
dis[v]=dis[u]+s[k].weight;
if(!vis[v])
{
q.push(v);
vis[v]=1;
}
}
} }
int qw[1000];
for(int i=0;i<t;i++)
qw[i]=dis[target[i]];
sort(qw,qw+t);
printf("%d\n",qw[0]);
}
int main()
{
int n,a,b,d,i,j,m;
while(scanf("%d",&N)!=EOF)
{
t=0,w=0;
memset(head,-1,sizeof(head));
for(i=0;i<N;i++)
{
scanf("%d%d",&m,&n);
if(n)
target[t++]=i;
for(j=0;j<m;j++)
{
scanf("%d%d",&a,&b);
s[w].from=i;
s[w].to=a;
s[w].weight=b;
s[w].next=head[i];
head[i]=w++;
s[w].from=a;
s[w].to=i;
s[w].weight=b;
s[w].next=head[a];
head[a]=w++;
}
}
spfa();
}
return 0;
}

三种方法。各有利弊,可是floyd无疑是最简单的,三重for循环即可了。只是时间复杂度挺高的,easy超时。但这个题,0ms没问题!

有什么问题希望大家指出。谢谢!

hdu3665-Seaside(SPFA,dijkstra,floyd)的更多相关文章

  1. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  2. HDU 1874 畅通工程续 SPFA || dijkstra||floyd

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目大意: 给你一些点,让你求S到T的最短路径. 我只是来练习一下SPFA的 dijkstra+邻接矩阵 ...

  3. HDU 1874 SPFA/Dijkstra/Floyd

    这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...

  4. poj1847 Tram(Dijkstra || Floyd || SPFA)

    题目链接 http://poj.org/problem?id=1847 题意 有n个车站,编号1~n,每个车站有k个出口,车站的出口默认是k个出口中的第一个,如果不想从默认出口出站,则需要手动选择出站 ...

  5. Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较

    参考 有空再更新下用c++, 下面用的Java Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV) BellmanFord:适用于权值有负值的图的单源最短路径 ...

  6. 最短路问题(Bellman/Dijkstra/Floyd)

    最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...

  7. POJ2387 Til the Cows Come Home(SPFA + dijkstra + BallemFord 模板)

    Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37662   Accepted ...

  8. 最短路径:Dijkstra & Floyd 算法图解,c++描述

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. dijkstra,SPFA,Floyd求最短路

    Dijkstra: 裸的算法,O(n^2),使用邻接矩阵: 算法思想: 定义两个集合,一开始集合1只有一个源点,集合2有剩下的点. STEP1:在集合2中找一个到源点距离最近的顶点k:min{d[k] ...

随机推荐

  1. 一个漂亮而强大的RecyclerView

    代码地址如下:http://www.demodashi.com/demo/13470.html 简介 主要提供了简单易用强大的RecyclerView库,包括自定义刷新加载效果.极简通用的万能适配器A ...

  2. struts过滤器的原理

    struts就是充当拦截器(过滤器)的作用.在web.xml配置过滤器, package cn.itcast.framework.core; import java.io.IOException; i ...

  3. NFS介绍

    一.NFS服务介绍 NFS是 Network File system的缩写 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机 ...

  4. STM32的IO口灌入电流和输出驱动电流最大是多少?

    最大可以输出8mA,灌入20mA,但要保证所有进入芯片VDD的电流不能超过150mA,同样所有从VSS流出的电流也不能超过150mA. 详细请看STM32的数据手册中的相关内容. 例如,STM32F1 ...

  5. unity, access sprite of UGUI Image

    首先需要using UnityEngine.UI; 然后调用下面语句就不报错了: Image.GetComponent<Image>().sprite 参考:http://answers. ...

  6. Decoration1:Spring-boot基础实现

    前段时间发布的Traveller项目,花费了不少精力,但是效果并不如意,根源在于瀑布式的开发思想不适合这种独立的学习项目.在项目初始就规划一个全面的web系统,,因为预设了一个前景,在心理上会想尽快看 ...

  7. SYN攻击防护措施

    SYN攻击的应对措施 针对SYN攻击的几个环节.提出对应的处理方法: 方式1:降低SYN-ACK数据包的重发次数(默认是5次): sysctl -w net.ipv4.tcp_synack_retri ...

  8. eclipse中使用weblogic作为服务器控制台中文乱码

    使用WebLogic时控制台输出中文乱码解决方法:   1.找到weblogic安装目录,当前项目配置的domain   2.找到bin下的setDomainEnv.cmd文件   3.打开文件,从文 ...

  9. PHP中的正则表达式及模式匹配

    PHP中的正则表达式及模式匹配 PHP中对于正则处理文本提供了两种方式,一种是PCRE方式(PCRE库是一个实现了与perl 5在语法和语义上略有差异(详见下文)的正则表达式模式匹配功能的函数集. 当 ...

  10. WEEX快速入门

    WEEX快速入门 WEEX 是阿里推送的一款基于Node.js,轻量级的移动端跨平台动态性技术解决方案,用于构建原生的速度的跨平台APP. 1. 搭建WEEX环境 1.1 首先下载安装Node.js, ...