@Alpacadh
2022-09-12T14:43:00.000000Z
字数 3392
阅读 867
ACM
#include<bits/stdc++.h>//#include<iostream>//#include<algorithm>//#include<cmath>//#include<cstring>//#include<stdio.h>using namespace std;const int inf=0x3f3f3f3f;const int N=1e3+5;const double eps=1e-4;int g[N][N];int d[N];int va[N];int val[N][N];int vis[N];//int pre[N];void dijkstra(int s, int n){memset(d,inf,sizeof(d));memset(vis,0,sizeof(vis));memset(va,inf,sizeof(va));d[s]=0;va[s]=0;// pre[s]=0;while(1){int v=-1;for(int u=1;u<=n;u++){if(!vis[u]&&(v==-1||d[u]<d[v]))v=u;}if(v==-1)break;vis[v]=1;for(int u=1;u<=n;u++){if(!vis[u]&&d[u]>d[v]+g[v][u]){d[u]=d[v]+g[v][u];va[u]=va[v]+val[v][u];// pre[u]=v; // 记录路径}else if(!vis[u]&&d[u]==d[v]+g[v][u])va[u]=min(va[u],va[v]+val[v][u]);}}}int main(){int n,m;while(scanf("%d%d",&n,&m)){if(n==0&&m==0)break;memset(g,inf,sizeof(g));memset(val,inf,sizeof(val));for(int i=0;i<m;i++){int u,v,a,b;scanf("%d%d%d%d",&u,&v,&a,&b);if(g[u][v]>a){g[u][v]=g[v][u]=a;val[u][v]=val[v][u]=b;}else if(g[u][v]==a)val[u][v]=val[v][u]=min(val[u][v],b);}int s,t;scanf("%d%d",&s,&t);dijkstra(s,n);printf("%d %d\n",d[t],va[t]);}return 0;}
#include<bits/stdc++.h>//#include<iostream>//#include<algorithm>//#include<cmath>//#include<cstring>//#include<stdio.h>using namespace std;const int inf=0x3f3f3f3f;const int N=1e3+5;const double eps=1e-4;int g[N][N];int d[N];int vis[N];//int pre[N];void dijkstra(int s, int n){memset(d,inf,sizeof(d));memset(vis,0,sizeof(vis));d[s]=0;// pre[s]=0;while(1){int v=-1;for(int u=0;u<=n;u++){if(!vis[u]&&(v==-1||d[u]<d[v]))v=u;}if(v==-1)break;vis[v]=1;for(int u=0;u<=n;u++){if(!vis[u]&&d[u]>d[v]+g[v][u]){d[u]=d[v]+g[v][u];// pre[u]=v; // 记录路径}}}}int main(){int t,n,m;while(~scanf("%d%d%d",&t,&n,&m)){int len=0;memset(g,inf,sizeof(g));for(int i=0;i<t;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);len=max(len,max(a,b));g[a][b]=g[b][a]=min(g[a][b],c);}for(int i=0;i<=len;i++)g[i][i]=0;for(int i=0;i<n;i++){int a;scanf("%d",&a);g[0][a]=g[a][0]=0;}dijkstra(0,len);int ans=inf;for(int i=0;i<m;i++){int a;scanf("%d",&a);ans=min(ans,d[a]);}printf("%d\n",ans);}return 0;}
#include<bits/stdc++.h>//#include<iostream>//#include<algorithm>//#include<cmath>//#include<cstring>//#include<stdio.h>using namespace std;const int inf=0x3f3f3f3f;const int N=1e2+5;const double eps=1e-4;int g[N][N];int d[N];int vis[N];//int pre[N];void dijkstra(int s, int n){memset(d,inf,sizeof(d));memset(vis,0,sizeof(vis));d[s]=0;// pre[s]=0;while(1){int v=-1;for(int u=1;u<=n;u++){if(!vis[u]&&(v==-1||d[u]<d[v]))v=u;}if(v==-1)break;vis[v]=1;for(int u=1;u<=n;u++){if(!vis[u]&&d[u]>d[v]+g[v][u]){d[u]=d[v]+g[v][u];// pre[u]=v; // 记录路径}}}}map<string,int>q;int main(){int t;while(~scanf("%d",&t)){if(t==-1)break;q.clear();memset(g,inf,sizeof(g));int k=0;string s,tt;cin>>s>>tt;q[s]=++k;if(s!=tt)q[tt]=++k;for(int i=0;i<t;i++){string a,b;int time;cin>>a>>b;if(q[a]==0)q[a]=++k;if(q[b]==0)q[b]=++k;scanf("%d",&time);g[q[a]][q[b]]=g[q[b]][q[a]]=time;}dijkstra(1,k);printf("%d\n",d[q[tt]]==inf?-1:d[q[tt]]);}return 0;}