hdu-3790-最短路径问题(dijkstra算法)
2014-08-12 11:24
190 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790
这题cin会超时i
关于解决cin超时的问题
在main函数开头加上 ios::sync_with_stdio(false) 就行了,理论上这个办法和用scanf差不多(学长教我的= =)不过我自己用的scanf是200多ms,用上面那句是500多ms orz
#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 1000001
using namespace std;
int dis[1010],cost[1010][1010],visit[1010],map[1010][1010],cos[1010];
int main(void)
{
int n,m,a,b,d,p,i,j,s,t,min,z;
while(scanf("%d%d",&n,&m)==2&&(n+m))
{
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
map[i][j]=INF;
cost[i][j]=INF;
}
}
while(m--)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
//cin>>a>>b>>d>>p;
if(d<map[a][b])
{
map[a][b]=map[b][a]=d;
cost[a][b]=cost[b][a]=p;
}
else if(d==map[a][b]&&p<cost[a][b])
{
cost[a][b]=cost[b][a]=p;
}
}
scanf("%d%d",&s,&t);
//cin>>s>>t;
visit[s]=1;
for(i=1; i<=n; i++)
{
dis[i]=map[s][i];
cos[i]=cost[s][i];
}
for(i=1; i<=n; i++)
{
min=INF;
for(j=1; j<=n; j++)
{
if(!visit[j]&&min>dis[j])
{
z=j;
min=dis[j];
}
}
visit[z]=1;
for(j=1; j<=n; j++)
{
if(!visit[j]&&dis[j]>dis[z]+map[z][j])
{
dis[j]=dis[z]+map[z][j];
cos[j]=cos[z]+cost[z][j];
}
else if(!visit[j]&&dis[j]==dis[z]+map[z][j]&&cos[j]>cos[z]+cost[z][j])
{
cos[j]=cos[z]+cost[z][j];
}
}
}
printf("%d %d\n",dis[t],cos[t]);
}
return 0;
}
这题cin会超时i
关于解决cin超时的问题
在main函数开头加上 ios::sync_with_stdio(false) 就行了,理论上这个办法和用scanf差不多(学长教我的= =)不过我自己用的scanf是200多ms,用上面那句是500多ms orz
#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 1000001
using namespace std;
int dis[1010],cost[1010][1010],visit[1010],map[1010][1010],cos[1010];
int main(void)
{
int n,m,a,b,d,p,i,j,s,t,min,z;
while(scanf("%d%d",&n,&m)==2&&(n+m))
{
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
map[i][j]=INF;
cost[i][j]=INF;
}
}
while(m--)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
//cin>>a>>b>>d>>p;
if(d<map[a][b])
{
map[a][b]=map[b][a]=d;
cost[a][b]=cost[b][a]=p;
}
else if(d==map[a][b]&&p<cost[a][b])
{
cost[a][b]=cost[b][a]=p;
}
}
scanf("%d%d",&s,&t);
//cin>>s>>t;
visit[s]=1;
for(i=1; i<=n; i++)
{
dis[i]=map[s][i];
cos[i]=cost[s][i];
}
for(i=1; i<=n; i++)
{
min=INF;
for(j=1; j<=n; j++)
{
if(!visit[j]&&min>dis[j])
{
z=j;
min=dis[j];
}
}
visit[z]=1;
for(j=1; j<=n; j++)
{
if(!visit[j]&&dis[j]>dis[z]+map[z][j])
{
dis[j]=dis[z]+map[z][j];
cos[j]=cos[z]+cost[z][j];
}
else if(!visit[j]&&dis[j]==dis[z]+map[z][j]&&cos[j]>cos[z]+cost[z][j])
{
cos[j]=cos[z]+cost[z][j];
}
}
}
printf("%d %d\n",dis[t],cos[t]);
}
return 0;
}
相关文章推荐
- hdu 3790 最短路径问题 dijkstra算法
- HDU 3790 最短路径问题(单源最短路---Dijkstra算法)
- HDU 3790 最短路径问题 (Dijkstra算法)
- HDU 3790.最短路径问题【最短路径Dijkstra算法】【4月14】
- HDU 3790 最短路径问题(双重Dijkstra算法)
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- HDU--3790:最短路径问题 (Dijkstra算法)
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- hdu 3790 最短路径问题
- HDOJ---3790 最短路径问题[Dijkstra算法||SPFA]
- hdu 3790 最短路径问题
- HDU-3790-最短路径问题
- 杭电hdu 3790 最短路径问题 dijkstra
- HDU 3790 最短路径问题 双向限制最短路
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题(dijkstra加强版)
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题
- HDU 3790 最短路径问题(经典呀)
- hdu 3790 最短路径问题