hdu 1874 畅通工程续

这道题没有1A,因为没有考虑重边。。。
floyd可以过。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int way[210][210];
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int a,b,x;
        memset(way,0x3f3f3f3f,sizeof(way));
        for(int i=0;i<n;i++)
        {
            way[i][i]=0;
        }
        while(m--)
        {
            cin>>a>>b>>x;
            way[a][b]=min(way[a][b],x);
            way[b][a]=min(way[b][a],x);
        }
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    way[i][j]=min(way[i][j],way[i][k]+way[k][j]);
        cin>>a>>b;
        if(way[a][b]==0x3f3f3f3f)
            cout<<"-1"<<endl;
        else
            cout<<way[a][b]<<endl;
    }
    return 0;
}

然后,djstl的话,就根本不用担心重边什么的。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct sb
{
    int x;
    int t;
    sb(int a,int b)
    {
        x=a;
        t=b;
    }
    bool operator<(const sb&wakaka)const
    {
        return t>wakaka.t;
    }
};
int n,m;
vector<sb>bian[210];
int ts[210];
bool vis[210];
void djstl(int who)
{
    for(int i=0;i<n;i++)
    {
        ts[i]=0x3f3f3f3f;
        vis[i]=false;
    }
    ts[who]=0;
    priority_queue<sb>q;
    q.push(sb(who,ts[who]));
    while(!q.empty())
    {
        sb x=q.top();
        q.pop();
        if(vis[x.x])
        {
            continue;
        }
        vis[x.x]=true;
        for(int i=0;i<bian[x.x].size();i++)
        {
            sb y=bian[x.x][i];
            if(ts[y.x]>x.t+y.t)
            {
                ts[y.x]=x.t+y.t;
                q.push(sb(y.x,ts[y.x]));
            }
        }
    }
}
int main()
{
    while(cin>>n>>m)
    {
        int a,b,x;
        while(m--)
        {
            cin>>a>>b>>x;
            bian[a].push_back(sb(b,x));
            bian[b].push_back(sb(a,x));
        }
        cin>>a>>b;
        djstl(a);
        if(ts[b]==0x3f3f3f3f)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            cout<<ts[b]<<endl;
        }
        for(int i=0;i<n;i++)
        {
            bian[i].clear();
        }
    }
    return 0;
}

你可能感兴趣的:(HDU,floyd,djstl)