Codeforces Round #586 (Div. 1 + Div. 2)E(拓扑排序,思维)
#include<bits/stdc++.h>
using namespace std;
int n,m,s; 
vector<int>edge[200007];
queue<int>leaf;
int weight[200007],degree[200007];
long long wei[200007];//当前点深搜下去的链的总重(不包括当前结点,当前结点权重通过weight已经计算在内) 
int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		cin>>weight[i];
	for(int i=1;i<=m;++i){
		int u,v;
		cin>>u>>v;
		edge[u].push_back(v);
		edge[v].push_back(u);
		++degree[u];
		++degree[v];
	} 
	cin>>s;
	for(int i=1;i<=n;++i)
		if(degree[i]==1&&i!=s)//如果s也是叶子,这条链的重量会计算在环内 
			leaf.push(i);
	while(!leaf.empty()){
		int i=leaf.front();
		leaf.pop();
		degree[i]=-1;//避免重复访问 
		for(int j=0;j<edge[i].size();++j){
			if(degree[edge[i][j]]<0)//孤立结点 
				continue;
			--degree[edge[i][j]];//访问过后拆边 
			wei[edge[i][j]]=max(wei[edge[i][j]],wei[i]+weight[i]);//更新当前结点可选择的链的最大值 
			if(degree[edge[i][j]]==1&&edge[i][j]!=s)
				leaf.push(edge[i][j]);
		}
	}
	long long ans=0;//环的总重 
	long long mx=0;//最大值的链的重量 
	for(int i=1;i<=n;++i){
		if(degree[i]<0)
			continue;
		ans+=weight[i];
		mx=max(mx,wei[i]);
	}
	cout<<ans+mx;
	return 0;
}
Codeforces Round #586 (Div. 1 + Div. 2)E(拓扑排序,思维)的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
		Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ... 
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
		Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ... 
- Educational Codeforces Round 43 (Rated for Div. 2)
		Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ... 
- Educational Codeforces Round 35 (Rated for Div. 2)
		Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ... 
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
		Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ... 
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
		Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ... 
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
		Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ... 
- Educational Codeforces Round 39 (Rated for Div. 2) G
		Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ... 
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
		Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ... 
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
		Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ... 
随机推荐
- CentOS7.6配置ip
			查看CentOS版本信息 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) 配置ip [root@loca ... 
- PTA的Python练习题(十六)
			第4章-15 换硬币 挺难的,这里学到一个range的用法: 也就是说range函数能实现顺序和倒序,取决于step是正是负 count = 0 x = int(input()) a = x // 5 ... 
- java平衡二叉树AVL数
			平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树 右旋:在插入二叉树的时候,根节点的右侧高 ... 
- java实现二维码的生成和解析:QRCode、zxing 两种方式
			第一种:QRCode.jar,使用QRCode生成和解析二维码 1.导入jar包 2.代码 (1)QRCodeUtil .java import com.swetake.util.Qrcode; i ... 
- 【IO多路复用】
			" 目录 一.IO模型介绍 二.阻塞IO(blocking IO) 三.非阻塞IO(non-blocking IO) 四.多路复用IO(IO multiplexing) 五.异步IO(Asy ... 
- 广度优先搜索(BFS)与深度优先搜索(DFS)的对比及优缺点
			深搜,顾名思义,是深入其中.直取结果的一种搜索方法. 如果深搜是一个人,那么他的性格一定倔得像头牛!他从一点出发去旅游,只朝着一个方向走,除非路断了,他绝不改变方向!除非四个方向全都不通或遇到终点,他 ... 
- mysql 存入数据库 中文乱码
			1.要保证数据库.表.字段都是utf-8的数据类型.排序一直即可. 数据库的在数据库属性里面改: 表的在设计表里面改: 字段的也是在设计表里面改: 常用命令: -- 检查字符集类型show varia ... 
- Javascript——(1)
			1.Javascript有两种解释表示形式:1)在html的<header>中写<script><script/>,另一种是将另一个文件保存为xxx.js文档,然后 ... 
- Coursera-吴恩达机器学习课程笔记-Week4+5
			Neural networks non-linear hypotheses 非线性假设 Neural model:logistic unit 第一层 Input layer 最后一层 Outer la ... 
- 使用$.ajax时的注意事项
			做PHP难免接触js,我也是这样,使用ajax的时候,我比较习惯使用$.ajax({}),这种方式,因为通用性较强.有时候会较少使用js,隔一段时间后再使用,有些细节内容容易模糊不清,这一次,我又忘记 ... 
