当前位置: 首页 > news >正文

小众宝藏图论问题总结

P3639 [APIO2013] 道路费用

太 tm 宝藏了。
看到 \(k\) 的数据范围,很难不让人想到 \(2^k\) 枚举边集。
因为当枚举的边集确定后,其最大价值是很好算的,只需用每一条非树边去约束即可。
但直接做肯定是不行的,因为 \(k\) 去到了 \(20\)
不难发现每次都跑一遍最小生成树重复计算的边很多,考虑将原图简化。
发现存在一些旧边每次都会被加入,可以将这些边处理出来。处理的过程也很简单,将所有新边加入,再跑一遍最小生成树,此时被加入的旧边就是一定会被加入的边。
将这些边加入到图中并缩点,便剩下了最多 \(k+1\) 点,此时就可以再去 \(2^k\) 枚举子集做。
代码巨 tm 恶心

Code:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 7, M = 3e5 + 7, K = 27;
int n, m, k;
ll a[N], res[N];
int tt, nn;
int belong[N];
int vis[N];
ll minn[K];
struct edge_union{int from, to;ll w;
}ee[M], ne[K], pe[K];
struct uds{int fa[N];void init(int len){for(int i = 1; i <= len; i++) fa[i] = i;}int get(int x){if(fa[x] == x) return x;return fa[x] = get(fa[x]);}void merge(int x, int y){x = get(x), y = get(y);fa[x] = y;}
}A, B;
struct Edge{struct edge{int to;int pre;}e[K << 1];int head[K], tot;int fa[K], dep[K];ll sz[K];void init(){memset(head, 0, sizeof(head));memset(sz, 0, sizeof(sz));memset(dep, 0, sizeof(dep));memset(fa, 0, sizeof(fa));tot = 0;}void add(int x, int y){e[++tot] = {y, head[x]};head[x] = tot;}void dfs(int u, int father){fa[u] = father;sz[u] = res[u];dep[u] = dep[father] + 1;for(int i = head[u]; i; i = e[i].pre){int v = e[i].to;if(v == father) continue;dfs(v, u);sz[u] += sz[v];}}void update(int u, int v, ll w){if(dep[u] < dep[v]) swap(u, v);while(dep[u] > dep[v]){minn[u] = min(minn[u], w);u = fa[u];}while(u != v){minn[u] = min(minn[u], w);minn[v] = min(minn[v], w);u = fa[u];v = fa[v];}}
}E;
bool cmp1(edge_union a, edge_union b){return a.w < b.w;
}
void build(){A.init(N - 7);B.init(N - 7);sort(ee + 1, ee + m + 1, cmp1);for(int i = 1; i <= k; i++){int u = ne[i].from, v = ne[i].to;A.merge(u, v);}for(int i = 1; i <= m; i++){int u = ee[i].from, v = ee[i].to;if(A.get(u) == A.get(v)) continue;A.merge(u, v);B.merge(u, v);}for(int i = 1; i <= n; i++){if(!vis[B.get(i)]){belong[i] = vis[B.get(i)] = ++nn;}else belong[i] = vis[B.get(i)];res[belong[i]] += a[i];}for(int i = 1; i <= k; i++){ne[i] = {belong[ne[i].from], belong[ne[i].to], 0};}for(int i = 1; i <= m; i++){int u = ee[i].from, v = ee[i].to;ll w = ee[i].w;if(B.get(u) == B.get(v)) continue;pe[++tt] = {belong[u], belong[v], w};B.merge(u, v);}sort(pe + 1, pe + tt + 1, cmp1);
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m >> k;for(int i = 1; i <= m; i++){cin >> ee[i].from >> ee[i].to >> ee[i].w;}for(int i = 1; i <= k; i++){cin >> ne[i].from >> ne[i].to;}for(int i = 1; i <= n; i++){cin >> a[i];}build();ll ans = 0;for(int S = 0; S < (1 << k); S++){A.init(K);E.init();memset(minn, 0x3f, sizeof(minn));bool flg = 0;for(int i = 1; i <= k; i++){if((~S) & (1 << (i - 1))) continue;int u = ne[i].from, v = ne[i].to;if(A.get(u) == A.get(v)){flg = 1;break;}A.merge(u, v);E.add(u, v);E.add(v, u);}if(flg) continue;for(int i = 1; i <= tt; i++){int u = pe[i].from, v = pe[i].to;if(A.get(u) == A.get(v)) continue;A.merge(u, v);E.add(u, v);E.add(v, u);}E.dfs(belong[1], 0);for(int i = 1; i <= tt; i++){int u = pe[i].from, v = pe[i].to;ll w = pe[i].w;E.update(u, v, w);}ll sum = 0;for(int i = 1; i <= k; i++){if((~S) & (1 << (i - 1))) continue;int u = ne[i].from, v = ne[i].to;if(E.dep[u] < E.dep[v]) swap(u, v);sum += E.sz[u] * minn[u];}ans = max(ans, sum);}printf("%lld\n", ans);return 0;
}
http://www.jsqmd.com/news/840710/

相关文章:

  • Linux 日志管理进阶
  • 3个实战技巧:深度掌握OBS StreamFX插件的专业级应用
  • 2026年家装仿石漆厂家哪家好:行业选型分析与核心实力梳理 - 万事通达
  • 魔兽争霸3 WarcraftHelper:让你的经典游戏在2026年焕发新生
  • 让旧iPhone重获新生的终极指南:Legacy iOS Kit降级工具详解
  • 新手避坑指南:用显微镜油镜观察细菌,这5个细节千万别做错
  • 2026 年华东气流粉碎机源头厂家推荐:气流粉碎机 / 流化床气流粉碎机 / GMP 标准气流粉碎机 / 实验室气流粉碎机 / 超微粉碎机选择指南 - 海棠依旧大
  • 2026年别墅仿石漆代理商选型指南:主流品牌实力与适配场景分析 - 万事通达
  • 告别强制绑定!实测Win11 OOBE跳过联网的3种方法:从经典Shift+F10到最新oobe\bypassnro命令全解析
  • RJ02.为什么中国不适合大规模推行国铁通勤化?
  • Honey Select 2终极汉化去码补丁:5分钟完整安装与优化指南
  • 智慧医疗口腔全景片牙齿缺陷检测数据集VOC+YOLO格式8106张12类别
  • FakeLocation终极指南:三分钟掌握Android应用级虚拟定位黑科技
  • 如何成为年薪百万的程序员?阿里P7的职业规划秘籍
  • 2026年内墙仿石漆服务商靠谱吗:行业选型标准与优质服务商深度分析 - 万事通达
  • openDCIM三漏洞链深度解析:AI Vulnhuntr自动化0day RCE在野利用全复盘
  • 如何通过DriverStore Explorer解决Windows驱动管理的三大核心难题
  • 2026武汉离婚律师推荐排行榜:十位资深婚姻家事律师深度解析与选择指南 - 博客湾
  • Legacy iOS Kit:让旧款iOS设备重获新生的全能工具指南
  • Nature Skills:AI助你写出顶级期刊论文
  • 开通Token Plan套餐后实际项目中的月度成本控制体验分享
  • 《信息系统项目管理师教程(第4版)》系列文章导航索引(2026完结版)
  • 如何快速压缩PDF文件?开源工具pdfsizeopt终极指南
  • 为什么你的电脑音质总是不满意?3步搞定系统级音频优化
  • 5分钟快速上手:抖音批量下载工具终极指南
  • 别再浪费标注预算了!用Python的modAL库5步搞定Active Learning,让模型自己挑数据
  • 2026年内墙仿石漆经销商选择指南:核心选型标准与优质合作品牌推荐 - 万事通达
  • 2026年别墅仿石漆厂家哪家好:行业选型标准与优质实力厂商推荐 - 万事通达
  • LangChain 第三课:Chain 链精讲
  • HarmonyOS ArkWeb 系列之页面预连接与 DNS 预解析:prepareForPageLoad 加速首屏