zoukankan      html  css  js  c++  java
  • HDU 3631

    http://acm.hdu.edu.cn/showproblem.php?pid=3631

    只能走标记过的点,方法是标记哪个点就对哪个点做floyd

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std ;
    const int INF=0xfffffff ;
    int n,m,q ;
    int dis[305][305],vis[305] ;
    void floyd(int k)
    {
        for(int i=0 ;i<n ;i++)
        {
            for(int j=0 ;j<n ;j++)
            {
                if(i==j || i==k || k==j)continue ;
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]) ;
            }
        }
    }
    int main()
    {
        int cas=1 ;
        int first=1 ;
        while(~scanf("%d%d%d",&n,&m,&q))
        {
            if(!n && !m && !q)break ;
            if(first)first=0 ;
            else putchar('
    ') ;
            printf("Case %d:
    ",cas++) ;
            for(int i=0 ;i<n ;i++)
            {
                for(int j=0 ;j<n ;j++)
                {
                    if(i==j)dis[i][j]=0 ;
                    else dis[i][j]=dis[j][i]=INF ;
                }
            }
            for(int i=0 ;i<m ;i++)
            {
                int s,t,v ;
                scanf("%d%d%d",&s,&t,&v) ;
                dis[s][t]=min(dis[s][t],v) ;
            }
            memset(vis,0,sizeof(vis)) ;
            for(int i=0 ;i<n ;i++)
                dis[i][i]=0 ;
            while(q--)
            {
                int op ;
                scanf("%d",&op) ;
                if(op)
                {
                    int x,y ;
                    scanf("%d%d",&x,&y) ;
                    //printf("!!!%d %d %d
    ",dis[x][y],vis[x],vis[y]) ;
                    if(!vis[x] || !vis[y])
                    {
                        printf("ERROR! At path %d to %d
    ",x,y) ;
                    }
                    else if(dis[x][y]==INF)
                        puts("No such path") ;
                    else{
                        printf("%d
    ",dis[x][y]) ;
                    }
                }
                else{
                    int x ;
                    scanf("%d",&x) ;
                    if(vis[x])
                        printf("ERROR! At point %d
    ",x) ;
                    else
                    {
                        vis[x]=1 ;
                        floyd(x) ;
                    }
                }
            }
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    二级域名配置
    环信框架-消息模块
    屏幕适配问题
    iOS-NSSession
    环信框架使用
    静态UITableView
    __weak存在的问题
    MVVM与MVC
    iOS通知与多线程
    block
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3652170.html
Copyright © 2011-2022 走看看