博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3629 [APIO2010]巡逻
阅读量:6310 次
发布时间:2019-06-22

本文共 1839 字,大约阅读时间需要 6 分钟。

用取反的方法来处理两个环相交的情况,,,

妙啊, 妙啊

#include 
#include
#include
#include
#include
#include
using namespace std;const int MAXN = 1e5 + 10;inline int read(){ char ch = getchar(); int x = 0; while(!isdigit(ch)) ch = getchar(); while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar(); return x;}struct edge{ int to, cost, rev;};int N, K;vector
g[MAXN];int dis[MAXN]; bool vis[MAXN];void dfs(int u, int dep) { if(vis[u]) return ; vis[u] = true; dis[u] = dep; for(int i = 0; i < (int) g[u].size(); i++) { edge &e = g[u][i]; dfs(e.to, dep + e.cost); }}bool give_tag(int u, int tag, int fa) { if(u == tag) return true; for(int i = 0; i < (int) g[u].size(); i++) { edge &e = g[u][i]; if(e.to == fa) continue; if(give_tag(e.to, tag, u)) { e.cost = g[e.to][e.rev].cost = -1; return true; } } return false;}int len = 0;void dp(int u) { vis[u] = true; for(int i = 0; i < (int) g[u].size(); i++) { edge &e = g[u][i]; if(vis[e.to]) continue; dp(e.to); len = max(len, dis[u] + dis[e.to] + e.cost); dis[u] = max(dis[u], dis[e.to] + e.cost); }}int main(){ // freopen("p3629.in", "r", stdin); cin>>N>>K; for(int i = 1; i < N; i++) { int u = read(), v = read(); g[u].push_back((edge){v, 1, g[v].size()}), g[v].push_back((edge){u, 1, g[u].size() - 1}); } dfs(1, 0); int ans = 0, st = 1, ed = 1; for(int i = 1; i <= N; i++) if(dis[i] > ans) ans = dis[i], st = i; memset(dis, 0, sizeof(dis)), memset(vis, false, sizeof(vis)); dfs(st, 0); ans = 0; for(int i = 1; i <= N; i++) if(dis[i] > ans) ans = dis[i], ed = i; if(K == 1) return printf("%d\n", ((N - 1) << 1) - ans + 1), 0; give_tag(st, ed, st); memset(dis, 0, sizeof(dis)), memset(vis, false, sizeof(vis)); dp(1); printf("%d\n", (N << 1) - ans - len); return 0;}

转载于:https://www.cnblogs.com/wsmrxc/p/9805186.html

你可能感兴趣的文章
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
阅读Android源码的一些姿势
查看>>
Web语义化标准解读
查看>>
一份代码构建移动、桌面、Web全平台应用
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>
云计算产业如何率先推行信用管理?
查看>>
Android 类库书签更新(一)
查看>>
Unity3D Input按键系统
查看>>
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
查看>>