文章

10

粉丝

399

获赞

14

访问

100.8k

头像
数组求和
P1631 上海交通大学2019年机试题
发布于2020年3月22日 21:42
阅读数 13.3k

又是一个签到题。

尤其时无向图,由于其对称性,该题就十分简单了。

无非就是把权值为非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;
}

 

登录查看完整内容


登录后发布评论

2 条评论
itachiabc
2021年2月28日 15:49

题目既然是带权图,两点最短距离不一定是邻边,有可能要经过其他点

假如4-5的最短距离要经过2,拿掉2之后4-5的最短距离会变化

只有无权图才能用这种方法吧?

赞(2)

长安 : 回复 itachiabc: 确实如此

2021年3月22日 12:36