3 solutions

  • 0
    @ 2022-6-10 22:50:45

    重要的事情说三遍:63 63 63 999999999 999999999 999999999

    #include <bits/stdc++.h>
    using namespace std;
    int dis[250][250];
    int n,m,k,f,x,y;
    int main(){
    	cin>>n>>m>>f;
    	memset(dis,63,sizeof dis);
    	//cout<<dis[1][1];
    	for(int i=1;i<=n;i++)dis[i][i]=0;
    	for(int i=1;i<=m;i++){
    		int u,v,w;
    		cin>>u>>v>>w;
    		dis[u][v]=min(w,dis[u][v]);
    	}
    	for(k=1;k<=n;k++)//中转站0~k
    		for(int i=1;i<=n;i++) //i为起点
    			for(int j=1;j<=n;j++) //j为终点
    				if(dis[i][j]>dis[i][k]+dis[k][j])//松弛操作 
    					dis[i][j]=dis[i][k]+dis[k][j]; 
    	while(f--){
    		cin>>x>>y;
    		if(dis[x][y]>999999999) cout<<"impossible"<<endl;
    		else cout<<dis[x][y]<<endl;
    	}
    	return 0;
    }
    

    Information

    ID
    1850
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    1
    Tags
    # Submissions
    135
    Accepted
    38
    Uploaded By