文章
10
粉丝
399
获赞
14
访问
100.8k
又是一个签到题。
尤其时无向图,由于其对称性,该题就十分简单了。
无非就是把权值为非0的边,按次数加起来就行了。
比如,二维数组第二行,代表结点2,考虑先删除第一点,该行加一次就行了。
最后一行就需要加n-1次。
实际上就是个数组按行*权值相加,没啥好说的。
#include<iostream>
using namespace std;
int main(){
int n;
while(cin>>n){
int sum = 0;
int a[n+1][n+1];
for(int i = 0;i<n;i++)
for(int j = 0;j<n;j++)
cin>>a[i][j];
for(int i = 1;i<n;i++)
for(int j = i+1;j<n;j++)
if(a[i][j]) sum+=a[i][j]*(i);
cout<<sum*2<<endl;
}
return 0;
}
登录后发布评论
题目既然是带权图,两点最短距离不一定是邻边,有可能要经过其他点
假如4-5的最短距离要经过2,拿掉2之后4-5的最短距离会变化
只有无权图才能用这种方法吧?