zoukankan      html  css  js  c++  java
  • POJ 1797 Heavy Transportation

    猛一看,好像是最大流,再一看,不是的……幸亏不是如果是我还一时写不出来,哈哈!

    用变形的Dijsktra就可以做出来。。

    我都可以做出来的题,那真叫一个水题!

    View Code
    #include <stdio.h>
    #include <memory.h>

    #define N 1002
    #define M 500000

    int nodevp[N];
    int nodeu[M],data[M],next[M],ind;
    int dist[N];
    bool flag[N];

    void addedge(int v,int u,int val)
    {
    nodeu[ind]=u;
    data[ind]=val;
    next[ind]=nodevp[v];
    nodevp[v]=ind++;
    }

    void Dijsktra(int s,int e,int n)
    {
    int i,v,u,min;

    memset(dist,0,sizeof(dist));
    memset(flag,0,sizeof(flag));
    for(i=nodevp[s];~i;i=next[i]) dist[nodeu[i]]=data[i];
    flag[s]=true;

    while(true)
    {
    for(v=0,i=1;i<=n;i++)
    {
    if(!flag[i] && dist[i]>dist[v])
    v=i;
    }

    if(v==e) return ;

    flag[v]=true;
    for(i=nodevp[v];~i;i=next[i])
    {
    u=nodeu[i];
    if(!flag[u])
    {
    min = dist[v]<data[i]?dist[v]:data[i];
    if(min>dist[u]) dist[u]=min;
    }
    }
    }

    }

    int main()
    {
    int t,n,m,cas=0;
    int i,v,u,val;
    freopen("input.txt","r",stdin);
    scanf("%d",&t);

    while(t--)
    {
    memset(nodevp,-1,sizeof(nodevp)); ind=0;
    scanf("%d %d",&n,&m);
    for(i=0;i<m;i++)
    {
    scanf("%d %d %d",&v,&u,&val);
    addedge(v,u,val);
    addedge(u,v,val);
    }

    Dijsktra(1,n,n);
    printf("Scenario #%d:\n%d\n\n",++cas,dist[n]);
    }


    return 0;
    }



  • 相关阅读:
    字符串匹配算法之Rabin-Karp算法
    算法导论之最近顶点对
    php连mssql中文乱码问题
    Trie树
    PAT 1057. Stack (30)
    PAT 1033. To Fill or Not to Fill (25)
    PAT 1034. Head of a Gang (30)
    PAT 1075. PAT Judge (25)
    spring框架资料
    Spring Security资料
  • 原文地址:https://www.cnblogs.com/fornever/p/2394178.html
Copyright © 2011-2022 走看看