2017"百度之星"程序设计大赛 - 资格赛 1002 度度熊的王国战略
全局最小割 Stoer-Wagner (SW算法)优化
优化吃藕了,感谢放宽时限,感谢平板电视 (pb_ds)
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <ext/pb_ds/priority_queue.hpp>
- typedef long long ll;
- typedef __gnu_pbds::priority_queue<std::pair<int, int>, std::less<std::pair<int, int> >, __gnu_pbds::binomial_heap_tag >pq;
- struct Edge {int from, to, nxt, val;};
- const int maxn = 3e3 + ;
- const int maxm = 4e5 + ;
- const int inf = ;
- int n, r;
- bool vis[maxn], bin[maxn];
- Edge e[maxm * + ];
- int head[maxn], id[maxn][maxn], esz;
- inline ll read() {
- int x = , f = ; char ch = getchar();
- while(ch < '' || ch > '') {if(ch == '-')f = -; ch = getchar();}
- while(ch >= '' && ch <= '') {x = x * + ch - ''; ch = getchar();}
- return x * f;
- }
- inline void add_edge(int from, int to, int val) {
- if(id[from][to] == -) {
- e[esz].from = from, e[esz].to = to, e[esz].val = val, e[esz].nxt = head[from];
- id[from][to] = esz; head[from] = esz++;
- } else {
- e[id[from][to]].val += val;
- }
- }
- inline void init() {
- memset(bin, false, sizeof(bin));
- memset(head, -, sizeof(head));
- memset(id, -, sizeof(id));
- esz = ;
- }
- pq que;
- pq::point_iterator it[maxn];
- inline int contract(int &s, int &t) { // Find s,t
- memset(vis, false, sizeof(vis));
- int i, j, k, mincut, maxc;
- while(!que.empty()) que.pop();
- for(i = ; i <= n; ++i)
- if(!bin[i])it[i] = que.push(std::make_pair(, i));
- else it[i] = nullptr;
- for(i = ; i <= n; i++) {
- k = -; maxc = -;
- if(que.empty()) return mincut;
- k = que.top().second, maxc = que.top().first; que.pop();
- s = t; t = k; mincut = maxc; vis[k] = true;
- for(j = head[k]; ~j; j = e[j].nxt) {
- int v = e[j].to, w = e[j].val;
- if(!bin[v] && !vis[v]) {
- que.modify(it[v], std::make_pair((it[v]->first) + w, v));
- }
- }
- }
- return mincut;
- }
- inline int Stoer_Wagner() {
- int mincut, i, j, s, t, ans;
- for(mincut = inf, i = ; i < n; i++) {
- ans = contract(s, t);
- bin[t] = true;
- if(mincut > ans) mincut = ans;
- if(mincut == )return ;
- for(j = ; j <= n; j++) if(!bin[j]) {
- if(id[j][t] == -)continue;
- if(id[s][j] == -)add_edge(s, j, e[id[j][t]].val);
- else e[id[s][j]].val += e[id[j][t]].val;
- if(id[j][s] == -)add_edge(j, s, e[id[j][t]].val);
- else e[id[j][s]].val += e[id[j][t]].val;
- }
- }
- return mincut;
- }
- int main() {
- int m;
- while(scanf("%d%d", &n, &m) != -) {
- init();
- for(int i = ; i <= m; i++) {
- int a, b, c;
- a = read(), b = read(), c = read();
- add_edge(a, b, c); add_edge(b, a, c);
- }
- printf("%d\n", Stoer_Wagner());
- }
- return ;
- }
2017"百度之星"程序设计大赛 - 资格赛 1002 度度熊的王国战略的更多相关文章
- hdu 6082 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛 )
度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- [SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛
[SinGuLaRiTy-1034] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 度度熊保护村庄 Time Limit: 2000/10 ...
- 2017"百度之星"程序设计大赛 - 资格赛
度度熊与邪恶大魔王 Accepts: 3666 Submissions: 22474 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- 2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景.磁盘有 ...
- 2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)
度度熊与邪恶大魔王 思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了) ...
- 2018"百度之星"程序设计大赛 - 资格赛 1002 子串查询
题面又是万能的毒毒熊... 实在不想写了,就只写了这题 记26个前缀和查询枚举最小值直接算 实在是氵的死 而且我忘记输出Case #%d 想了很久 >_< #include<bits ...
- 2017"百度之星"程序设计大赛 - 资格赛 寻找母串
Problem Description 对于一个串S,当它同时满足如下条件时,它就是一个01偏串: 1.只由0和1两种符组成: 2.在S的每一个前缀中,0的个数不超过1的个数: 3.S中0的个数和1的 ...
- 2017"百度之星"程序设计大赛 - 资格赛 度度熊的王国战略
度度熊的王国战略 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更好的进攻哗啦啦族,度度 ...
随机推荐
- 数据分析九:互联网征信中的信用评分模型(用户APP使用行为分析)
用户APP使用行为数据分析: 一. 背景及数据介绍: 1. 移动互联网发展背景: 网民规模7.72亿,手机网民规模7.53亿: 2. APP使用热点: 商务交易类应用规模高速增长(网络购物,网上外卖, ...
- LOJ3120. 「CTS2019」珍珠 [容斥,生成函数]
传送门 思路 非常显然,就是要统计有多少种方式使得奇数的个数不超过\(n-2m\).(考场上这个都没想到真是身败名裂了--) 考虑直接减去钦点\(n-2m+1\)个奇数之后的方案数,但显然这样会算重, ...
- Vs中包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
VS项目中的包含目录.库目录.附加包含目录.附加库目录.附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下: VC++目录: 包含目录:寻找#inclu ...
- luogu2331
P2331 [SCOI2005]最大子矩阵 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入格式 第一行为n,m,k ...
- saltstack运维工具
salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...
- 为win10下的linux子系统终端添加powerline
一切按照上一篇完成,如果成功了,你厉害了我的哥,如果不成功,win10安装powerline字体才可以,才可以,才可以 sudo apt install build-essential cmake g ...
- tmux 入门踩坑记录
软件安装 sudo apt-get install tmux 1. 分割左右窗口 ^b -> % 运行 tmux 新建一个 tmux 的会话(session),此时窗口唯一的变化是在底部会出现一 ...
- Java排序之计数排序
Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...
- Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑
脚本运行的过程中,大量request抛error,但没有地方能够查看request是因为什么error的. 原因:Jmeter默认禁掉了运行过程中每个request的具体response信息收集,只保 ...
- [Phoenix] Mix 命令
mix phx.gen.html 命令生成模板: # 其中 name 和 age 是 schema 字段名称,后面跟的是类型 # 下面这样的写法,会生成 controller 和 service 层的 ...