7/25

问题 C: 信使

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m;
bool vis[2503];
int d[2503];
struct node{
    int v,w;
}; 
vector<node> G[2503];
void dijkstra(){
    d[1]=0;
    while(1){
        int x=0;
        int minn=INF;
        for(int i=1;i<=n;i++){
            if(!vis[i]&&d[i]<minn){
                x=i;
                minn=d[i];
            }
        }
        if(x==0)break;
        vis[x]=true;
        for(int i=0;i<G[x].size();i++){
            int y=G[x][i].v;int z=G[x][i].w;
            if(!vis[y]&&d[y]>d[x]+z)d[y]=d[x]+z;
        }
    }
}
int main()
{
    memset(vis,false,sizeof(vis));
    memset(d,INF,sizeof(d));
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        G[a].push_back({b,c});
        G[b].push_back({a,c});
    }
    dijkstra();
    int ans=0;
    for(int i=2;i<=n;i++){
        ans=max(ans,d[i]);
    }
    cout<<ans;
    return 0;
}

问题 D: 【USACO】热浪

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m,S,T;
bool vis[2503];
int d[2503];
struct node{
    int v,w;
}; 
vector<node> G[2503];
void dijkstra(){
    d[S]=0;
    while(1){
        int x=0;
        int minn=INF;
        for(int i=1;i<=n;i++){
            if(!vis[i]&&d[i]<minn){
                x=i;
                minn=d[i];
            }
        }
        if(x==0)break;
        vis[x]=true;
        for(int i=0;i<G[x].size();i++){
            int y=G[x][i].v;int z=G[x][i].w;
            if(!vis[y]&&d[y]>d[x]+z)d[y]=d[x]+z;
        }
    }
}
int main()
{
    memset(vis,false,sizeof(vis));
    memset(d,INF,sizeof(d));
    cin>>n>>m>>S>>T;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        G[a].push_back({b,c});
        G[b].push_back({a,c});
    }
    dijkstra();
    cout<<d[T];
    return 0;
}

 

posted @ 2023-07-26 16:27  臧清宇  阅读(62)  评论(0)    收藏  举报