codeforces 1220E
传送门
题意:给定无向连通图和起点S,每个点有权值,求遍历无向图得到的最大权值和。但是不能走回头路,即如果从U走到V那么下一步不可以从V走到U。
分析:将图分成两种组成,一种是环,一种是链。对于S所在的环,肯定可以遍历这个环回到S。对于其他的环,肯定可以走到这个环中,遍历这个环,然后原路返回。那么最优解就是首先遍历所有的环,连接这些环的链也可以被遍历到,然后选择一条最大的链走到尽头。
#include <bits/stdc++.h> #define mp make_pair #define mst(a,n) memset(a, n, sizeof(a)) #define debug(x) cout << #x << ": " << x << endl #define pb push_back typedef long long LL; const int maxn = 2e5 + 10; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; using namespace std; int f[maxn], n, m, u, v, cnt[maxn], s, fa[maxn], vis[maxn], dep[maxn]; LL w[maxn], dp[maxn], ans = -1; vector<int> g[maxn]; int find(int x) {return f[x] == -1 ? x : f[x] = find(f[x]); } void dfs(int now, int pre) {vis[now] = true;dep[now] = dep[pre] + 1;for (int i = 0; i < g[now].size(); ++i) {int to = g[now][i];if (to == pre)continue;if (!vis[to]) {fa[to] = now;dfs(to, now);}else if (dep[to] <= dep[now]) {cnt[to]++;cnt[now]--;}} } void _dfs(int now) {for (int i = 0; i < g[now].size(); ++i) {int to = g[now][i];if (fa[to] == now) {_dfs(to);cnt[now] += cnt[to];}} }bool __dfs(int now) {bool flg = false;for (int i = 0; i < g[now].size(); ++i) {int to = g[now][i];if (fa[to] == now) {if (__dfs(to)) {flg = true;int fu = find(now), fv = find(to);if (fu != fv) {dp[fu] += dp[fv];f[fv] = fu;}}}}return flg || cnt[now] != 0; }void ___dfs(int now, LL sum) {ans = max(ans, sum);for (int i = 0; i < g[now].size(); ++i) {int to = g[now][i];if (fa[to] == now) {if (find(to) != s)___dfs(to, sum + w[to]);else___dfs(to, sum);}} } int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; ++i) {f[i] = -1;cnt[i] = 0;vis[i] = 0;cin >> w[i];dp[i] = w[i];}for (int i = 1; i <= m; ++i) {cin >> u >> v;g[u].pb(v);g[v].pb(u);}cin >> s;dfs(s, 0);_dfs(s);__dfs(s);___dfs(s, 0);cout << dp[s] + ans << endl; }
View Code
转载于:https://www.cnblogs.com/smallhester/p/11551473.html
codeforces 1220E相关推荐
- CodeForces - 1220E Tourism(边双缩点+树形dp)
题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,每个点都有一个权值,现在给出起点st,问从起点出发,如何规划路线可以使得途径的权值最大,唯一的约束是一条边不能连续经过,比如当前从u ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
- 【codeforces 812C】Sagheer and Nubian Market
[题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...
- CodeForces 获得数据
针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...
- codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...
- CodeForces 595A
题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...
- codeforces A. Jeff and Digits 解题报告
题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
最新文章
- 5see我看视频交友客户端 v2.3.0.11官方版
- HTTP状态码:400\500 错误代码
- 计算机组成原理简单计算机设计,计算机组成原理课设.doc
- for循环和while循环
- JVM优化系列-Stop-The-World实战
- 统计学基础学习笔记:概率与概率分布
- 《天天数学》连载15:一月十五日
- tshark 解析pcap中带TLS协议的数据包
- Windows Phone 7 文件下载进度和速度显示
- 创业宝典:未来企业家之路(第5版)
- Python(十六):标准库
- 计算机桌面图标有小锁如何去掉,去掉电脑桌面图标小黄锁的两种方法
- JAVA计算机毕业设计员工健康检测系统Mybatis+源码+数据库+lw文档+系统+调试部署
- TVS相关参数与选型
- Zookeeper客户端网络通讯模型分析
- Codeforces 32A A. Reconnaissance (暴力)
- dnf服务器炸团门票怎么找回,DNF最新BUG,玩家打团买票后材料消失,无法引炸直接退队!...
- MFC ClientToScreen 和 ScreenToClient
- 华为云认证有什么?考试难不难?
- ipad做扩展屏方法
热门文章
- ES6学习(八)—Promise对象 超鸡重要
- php7.2 session,PHP 7.2 Warning: “Cannot change session name when session is active”
- 贷款买车后,有多少人后悔了?
- 古巷里的人像写真,怎么拍出漂亮的照片?
- 之前8年都在上班工资16000,厌倦了天天上班的日子,就裸辞了。现在很迷茫,下一步怎么办?
- 矜情作态的拼音及解释
- 自媒体人本质是互联网公司内容运营的角色
- 一个人成就的高低,努力程度只是标配
- 未处理的超时和请求取消
- 苹果XR信号差,可否要求苹果公司召回?