标签:ict 图论 dict 文件中 spfa算法 turn lin bubuko 技术
#include<bits/stdc++.h> using namespace std; int dis[1500][1500],a[1500],n,m,t,f[1500][1500],xx,yy; inline int read() { int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){if(ch==‘-‘) f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f; } inline void dfs() { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(dis[i][k]+dis[k][j]<=dis[i][j]) { dis[i][j]=dis[i][k]+dis[k][j]; } } } int main() { memset(dis,10,sizeof(dis)); m=read();n=read(); for(int i=1;i<=n;i++) { cin>>xx>>yy; dis[xx][yy]=1; dis[yy][xx]=1; } // cout<<dis[4][5]<<endl; dfs(); t=read(); int x,y; for(int i=1;i<=t;i++) { x=read();y=read(); int s=0; a[++s]=x; for(int j=1;j<=n;j++) { if(dis[x][j]+dis[j][y]==dis[x][y]) a[++s]=j; } //cout<<dis[2][4]<<‘ ‘<<dis[4][5]<<endl; a[++s]=y; sort(a+1,a+s+1); for(int j=1;j<=s;j++) { cout<<a[j]<<‘ ‘; } cout<<endl; } return 0; }
#include<bits/stdc++.h> using namespace std; #define N 1500 int lin[N],tot; int n,m,h,w[N],vis[N],dis[N],d[N]; int xx,yy,zz; long long minn=100100000000000ll,ans=0; struct gg { int x,y,v; int next; }a[N<<1]; inline void init(int xx,int yy,int vv) { a[++tot].y=yy; a[tot].next=lin[xx]; a[tot].v=vv; lin[xx]=tot; } inline void spfa(int s) { memset(vis,0,sizeof(vis)); memset(dis,257,sizeof(dis)); queue<int> q; dis[s]=0;vis[s]=1;q.push(s); while(q.size()) { int x=q.front();q.pop(); for(int i=lin[x];i;i=a[i].next) { int v=a[i].y; if(dis[v]>dis[x]+a[i].v) { dis[v]=dis[x]+a[i].v; if(!vis[v]) vis[v]=1,q.push(v); } } vis[x]=0; } } int main() { cin>>n>>m>>h; for(int i=1;i<=n;i++) cin>>d[i]; for(int i=1;i<=h;i++) { cin>>xx>>yy>>zz; init(xx,yy,zz); init(yy,xx,zz); } for(int i=1;i<=m;i++) { spfa(i);ans=0; for(int j=1;j<=n;j++) ans+=dis[d[j]]; if(ans<minn) minn=ans; } cout<<minn; return 0; }
标签:ict 图论 dict 文件中 spfa算法 turn lin bubuko 技术
原文地址:https://www.cnblogs.com/Tyouchie/p/10204573.html