7-8 公路村村通 (10 分)

简介: 7-8 公路村村通 (10 分)

7-8 公路村村通 (10 分)


现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。


输入格式:


输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。


输出格式:


输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。


输入样例:

6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3


结尾无空行


输出样例:


12


结尾无空行


#include<iostream>
#include<cstring>
using namespace std;
const int N=500,inf=0x3f;
int g[N][N],w[N][N];
int main(){
    memset(g,inf,sizeof(g));
    memset(w,inf,sizeof(w));
    int n,m,s,d;
    cin>>n>>m>>s>>d;
    for(int i=0;i<m;i++){
        int x,y,len,wx;
        cin>>x>>y>>len>>wx;
        g[x][y]=g[y][x]=len;
        w[x][y]=w[y][x]=wx;
    }
    for(int k=0;k<n;k++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(g[i][j]>g[i][k]+g[k][j]||(g[i][j]==g[i][k]+g[k][j]&&w[i][j]>w[i][k]+w[k][j])){
                    g[i][j]=g[i][k]+g[k][j];
                    w[i][j]=w[i][k]+w[k][j];
                }
            }
        }
    }
    cout<<g[s][d]<<' '<<w[s][d];
    return 0;
}



目录
相关文章
|
7月前
1053 住房空置率 (20 分)
1053 住房空置率 (20 分)
|
7月前
1052 卖个萌 (20 分)//部分正确
1052 卖个萌 (20 分)//部分正确
|
7月前
|
测试技术
1028 人口普查 (20 分)
1028 人口普查 (20 分)
L2-028 秀恩爱分得快 (25 分)
L2-028 秀恩爱分得快 (25 分)
163 0
7-9 地下迷宫探索 (8 分)
7-9 地下迷宫探索 (8 分)
151 0
7-9 地下迷宫探索 (8 分)
|
C++
201703-1 分蛋糕
201703-1 分蛋糕
75 0
201703-1 分蛋糕
h0131. 钞票 (15 分)
h0131. 钞票 (15 分)
118 0
L2-007 家庭房产 (25 分)(并查集)
L2-007 家庭房产 (25 分)(并查集)
140 0
|
算法 测试技术
h0103. 末日算法 (10 分)
h0103. 末日算法 (10 分)
249 0
L1-024 后天 (5 分)
L1-024 后天 (5 分)
165 0

热门文章

最新文章