zoukankan      html  css  js  c++  java
  • hdu-3790-最短路径问题(dijkstra算法)

    题目链接: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 ",dis[t],cos[t]);
    }
    return 0;
    }

  • 相关阅读:
    网化商城
    ITU R-REC-S 系列建议书分类
    UDLua
    libev简单使用
    Windows 审计日志 安全部分不刷新的解决办法
    sys.version_info
    mitmproxy 安装
    Python3 os.remove() 方法
    Python3 os.rename() 方法
    python3 unittest
  • 原文地址:https://www.cnblogs.com/liudehao/p/3906890.html
Copyright © 2011-2022 走看看