【2018 ccpc-final Gym 102055】B.Balance of the Force(枚举最大值)

CodeForces Gym 102055 简要题解 Mischievous Problem Setter 模拟。 #include <bits/stdc++.h> using namespace std; int main() { #ifdef wxh010910 freopen("input.txt", "r", stdin); #endif ios::sync_with_stdio(false); cin.tie(0... 阅读详情

https://codeforces.com/gym/102055/problem/B

题意

宇宙中有两个阵营,分别为光明和黑暗,现在有n个骑士,每个骑士都能选择加入黑暗或者光明的阵营,加入后的能力值分别为D和L,已知有m对骑士不愿意在同一个阵营,请问如何分配,能使得能力最高的骑士和能力最低的骑士之间的能力差值最小?

题解

对于差值尽量小的问题,可以采用枚举最大值,然后使得最小值尽量大。

此题关键点便是枚举最大值,找到最大的最小值,更新答案。

首先对骑士进行二分图判定,并把他们看成一个连通块,可以知道这个连通块里的最大值mx和最小值mn有两种方案(一部分在光明,一部分在黑暗,也可以反过来),记录下这两种方案。
将这些方案按照最大值从小到大排序。
从左到右依次枚举最大值 curmx。
假设当前位置最大值为curmx,位置为i。
如果[1,i-1]中的连通块个数等于二分图缩点判定后的个数,那么就可以找mn的最小值curmn。更新下答案 ans = min(ans, curmx-curmn)。
但是有个地方要注意,可能得出的curmn是当前方案i的孪生方案中的mn(每个块会有两种方案),因为每个连通块只能选一个方案,所以必须把前面这个孪生方案的mx的贡献给去掉。这样求出来的curmn就是正确的。
枚举完这个i后,应该更新当前位置的mn,同时如果前面有孪生方案j的话,那么两个位置都需要更新一下,更新的值便是max(a[j].mn, a[i].mn)。因为要让最小值尽量大。
上述的步骤可以用数据结构在logn时间内完成。
总复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。

代码

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)

#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5+5;
const int INF = 0x3f3f3f3f;
vector<int> G[maxn];
int color[maxn], n, m, val[maxn][2], sum[maxn];
int _mn[maxn<<3], pos[maxn];
bool vis[maxn];

struct node {
	int mx,mn;
	int id;
	bool operator < (const node& rhs) const {
		return mx < rhs.mx;
	}
}a[maxn*2];

void pushup(int rt) {
	_mn[rt] = min(_mn[rt<<1], _mn[rt<<1|1]);
}
void build(int l, int r, int rt) {
	_mn[rt] = INF;
	if(l == r) {
		return;
	}
	int mid = (l+r) >> 1;
	build(lson);
	build(rson);
	pushup(rt);
}
void update(int L, int v, int l, int r, int rt) {
	if(l == r) {
		_mn[rt] = v;
		return;
	}
	int mid = (l+r) >> 1;
	if(mid >= L) 
		update(L,v,lson);
	if(mid < L)
		update(L,v,rson);
	pushup(rt);
}
int query(int L, int R, int l, int r, int rt) {
	if(l <= L && R <= r) {
		return _mn[rt];
	} else 
		return INF;
	int mid = (l+r) >> 1;
	int res = min(query(L,R,lson),query(L,R,rson));
	return res;
}
void init() {
	for(int i = 0; i <= n; ++i) {
		G[i].clear();
		pos[i] = vis[i] = color[i] = 0;
	}
}
bool flag;
void dfs(int u, node& c1, node& c2) {
	if(!flag) return;
	c1.mx = max(c1.mx, val[u][0]);
	c1.mn = min(c1.mn, val[u][0]);
	c2.mx = max(c2.mx, val[u][1]);
	c2.mn = min(c2.mn, val[u][1]);
	for(auto v: G[u]) {
		if(color[v] == 0) {
			color[v] = 3-color[u];
			dfs(v,c2,c1);
		} else if(color[v] == color[u]) {
			flag = false;
			return;
		}
	}
}
int main() {
	int T;
	scanf("%d", &T);
	int ca = 0;
	while(T--) {
		printf("Case %d: ",++ca);
		init();
		scanf("%d%d", &n, &m);
		int u,v;
		for(int i = 0; i < m; ++i) {
			scanf("%d%d", &u, &v);
			G[u].push_back(v);
			G[v].push_back(u);
		}
		for(int i = 1; i <= n; ++i)
			scanf("%d%d", &val[i][0], &val[i][1]);
		int sz = 1;
		flag = true;
		int cnt = 0;
		for(int i = 1; i <= n; ++i) {
			if(!color[i]) {
				cnt++;
				a[sz].mx = -INF; a[sz].mn = INF; a[sz].id = i;
				a[sz+1] = a[sz];
				color[i] = 1;
				dfs(i, a[sz], a[sz+1]);
				sz += 2;
			}
		}
		if(!flag) {
			puts("IMPOSSIBLE");
			continue;
		}
		sort(a+1,a+sz);

		// for(int i = 1; i < sz; ++i) {
		// 	cout << a[i].id <<" " << a[i].mx <<" " << a[i].mn << endl;
		// }
		for(int i = 1; i < sz; ++i) {
			sum[i] = sum[i-1];
			if(!vis[a[i].id]) {
				sum[i]++;
				vis[a[i].id]= 1;
			}
		}
		build(1,sz-1,1);
		int ans = INF;
		for(int i = 1; i < sz; ++i) {
			int curmx = a[i].mx, curmn = a[i].mn;
			if(sum[i] == cnt) {
				if(pos[a[i].id]) {
					update(pos[a[i].id], INF, 1,sz-1,1);
				}
				
				curmn = min(curmn, query(1,i-1, 1,sz-1,1));
				ans = min(ans, curmx-curmn);
			}
			if(pos[a[i].id]) {
				int ml = max(a[i].mn, a[pos[a[i].id]].mn);
				update(pos[a[i].id], ml, 1,sz-1,1);
				update(i, ml, 1,sz-1,1);
			} else {
				update(i,a[i].mn,1,sz-1,1);
				pos[a[i].id] = i;
			}
		} 
		printf("%d\n", ans);
		
	}
	return 0;
}
6-4 学生成绩链表处理(20 分) 新博客:https://wywwzjj.top/ 本题要求实现两个功能,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: struct stud_node *createlist(); struct stud_node *deletelist( struct stud_node *head, int min_score ); 函... 阅读详情

相关推荐

钢铁雄心4存档修改全攻略:从基础设置到高级玩法(附国家代码表)

本文详细解析《钢铁雄心4》存档修改技巧,从基础设置到高级玩法全覆盖。包括存档文件位置、格式转换、国家实力调整、国际关系修改等实用内容,并附赠国家代码表。掌握存档修改技能,解锁游戏全部潜力,实现精细参数控制,超越控制台指令的局限。

weixin_29233857的博客 1431

Gym102055 (CCPC-final 2018)

2018CCPC-FINAL

tarjen的博客 263

算法基础之数组双指针(Leetcode题型归纳)

数组双指针(Leetcode题型归纳)1.前言2.双指针基础3.相向双指针3.1定义3.2真题分析3.2.1两数之和(1)3.2.2两数之和-输入有序数组(167)3.2.3三数之和(15)3.2.4最接近的三数之和(16)3.2.5四数之和(18)3.2.6盛最多水的容器(11)3.2.7有效三角形的个数(611)4.同向双指针-快慢指针4.1定义4.2真题分析4.1.1删除排序数组中的重复项(26)4.1.2移除元素(27)4.1.3删除排序数组中的重复项(80)4.1.4移动零(283)4.1.5数组

Buluchacha的博客 1034

2018 ccpc final

B. Balance of the Force 上来不难想到如何判impossible 以及划分成多个连通块 可跨连通块之间的选法如何选择呢 比赛的时候没想出来 其实是对于每个连通块来说 最大值进行排序 实时模拟最小值都有谁 如果符合题目中给出的连通块个数 那么更新答案即可 #include <bits/stdc++.h> using namespace std; const int N = 200020, M = 2 * N; #define lson l, m, rt<<1 #

binggui2的博客 309

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续性变化,因此也能够控制外设的功率进行持续性变化,也就能控制直流电机的转速快慢。 那么重点就在于如何调节PWM波形的输出。如下图所示 图中的ARR是我们给定时器的一个预装载值,CCRx的上下变化是产生PWM波的关键。我们假设ARR大于CCRx的部分输出为高电平(即t1-t2、t3-t4

Clichong 7万+

DSP复习笔记(5)——外部接口模块XINTF

【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习

BerenCamlost的博客 1万+

B. Balance of the Force (思维)

https://codeforces.com/gym/102055/problem/B 样例

hehepig的博客 278

SAP开发实战:用FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本(附完整ABAP代码)

本文详细介绍了如何使用SAP的FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本,提供完整的ABAP代码实现方案。通过该BAPI,开发者可以高效完成财务凭证的批量修改,确保数据一致性和审计合规性,显著提升SAP财务模块的运维效率。

weixin_29224589的博客 380

B - Balance of the Force 二分图染色+线段树+枚举

B. Balance of the Force time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa...

博客周 438

Java实战:用Proj4j搞定WGS84与CGCS2000坐标互转(附完整代码)

本文详细介绍了如何使用Java库Proj4j实现WGS84与CGCS2000坐标系之间的高精度转换。通过七参数转换模型和格网改正量文件,提供完整的代码实现和项目配置指南,帮助开发者快速集成到地理信息系统项目中,提升坐标转换效率和精度。

weixin_29251567的博客 827

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操

可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。

一键难忘的博客 4047

2018 ccpc final:B. Balance of the Force (枚举)

题目大意:有n个骑士,每个骑士可以加入光阵营或暗阵营,并且获得一个力量,分别为L和D,现在有m对骑士不能在同一个阵营,问力量差值(最大值和最小值的差值)最小是多少?如果不存在阵营满足仇恨骑士不在同一个阵营内,则输出IMPOSSIBLE。 解法:首先二分图判定一下是否存在奇环,若存在奇环则输出IMPOSSIBLE。 按仇恨关系建边形成的图,注意到一个连通分量只要一个人选定加入哪个阵营,其他人的阵营也...

qq_41997978的博客 756

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 345

ccpc2018 final 深圳 B Balance of the Force

https://codeforces.com/gym/102055/problem/B 训练的时候队友WA K太久了这题我口胡完了没写完。 补题发现卧槽巨卡空间,stl空间常数巨大,底层都是vector,vector自带3倍空间常数,然后又不知道有其他的什么空间消耗= = 本来用了两个priority_queue套了一堆pair然后mle 然后换成了pair的multiset又mle 最...

binarycopycode 358

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2018 深圳CCPC final B. Balance of the Force 枚举最大值 + 线段树 + 二分图染色

题目链接:http://codeforces.com/gym/102055/problem/B 题意: 有两个种类, n个物品, 有m句话每句话都会说明那两个不是一个种类,且每个物品被当作每个种类的价值不一样。 问是否有案例成立,若成立求出案例中物品最大的价值与最小价值之差最小。 思路: 首先用染色法求是否成立。 然后缩点把每个连通块缩点,每个点就有两种方案,每个方案都有一个最大值和最小值,...

ClonH的博客 333

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Balance of the Force【2018 CCPC Final B】【枚举+种类并查集+线段树】

2018 China Collegiate Programming Contest Final (CCPC-Final 2018) 题目链接 这道题的思维当真是一步一步的去接近答案,想了许久。 一、种类并查集划分关系进集合 首先,看到那个矛盾,第一想到的就是种类并查集,当然,因为这道题不是强制在线,所以当然也是可以直接用复杂度O(N)的二分图来完成这个处理。我们将这么多互相有关系的点...

既然弱小,就只顾变强就是了 726

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【离散化】【扫描线】codeforces102055B Balance of the Force

B. Balance of the Force time limit per test4.0 s memory limit per test256 MB inputstandard input outputstandard output A long time ago in a galaxy far, far away, there was a group of knights who maste...

BUAA_Alchemist的博客 820

2018 CCPC Final B - Balance of the Force(贪心+二分图染色)

2018 CCPC Final B - Balance of the Force 题目链接:传送门 题意: 给定 NNN个人,每个人可以选择加入黑暗 DarkDark 或者光明 LightLight 两种阵营,他们加入不同的阵营之后获得的力量值是不同的,即 DiD_iDi​ 和 LiL_iLi​ 。然后有些人之间有矛盾,是不能加入同一阵营的,矛盾的对数共有 MM 对,现在给出所有的矛盾和所有的 L...

Dch19990825的博客 519

2018 CCPCfinal 感悟

第一次参加正式赛,其实心态还算稳,但是还是没有逃脱打铁的命运 首先说说第一天的热身赛 热身赛四道题,a了三道,签到题+数学期望+dfs。数学题A的过程比较曲折,由于样例给的很良心,其实也提供了一些思路,然后在这个过程中讨论了一下,后来改变了从前向后变为从后往前推的思路,过来全部样例就A了,所以说样例良心来着。dfs完全是队友搜索写得好。 然后说第二天正式赛 正式赛A题签到题,在队友敲的时候...

zm_zsy的博客 1069

2018 China Collegiate Programming Contest Final (CCPC-Final 2018) 部分题解及AC代码

2018 China Collegiate Programming Contest Final (CCPC-Final 2018) A - Mischievous Problem Setter 题意:一些题目的有难度值d,和需要花费的时间t,只能按难度递增的顺序解决问题,问在T时间内最多解决几题 题解:贪心 按难度值排序,然后能做就做,这题的意思是不能跳着做 #include <...

Adolphrocs的博客 1848

2018 CCPC-Final 2018 I. Cockroaches(技巧题)

题目链接 题意:现在有n只虫,每只虫的位置都用一个横竖坐标表示,现在有一种杀虫剂,这种杀虫剂投放到某一点,能将所在行和列的所有虫杀死,现在让求出只投放一次杀虫剂,最多能杀多少只虫和在满足杀最多只虫的情况下,有多少种方式能杀这么多只虫。 题解:因为没有给定这个坐标系到底有多大,所以肯定不能暴力枚举,首先我们考虑虫都在一行或一列的情况,肯定只有一种情况,杀n只虫,还有就是每行每列都只有一只(例如对...

不二君 1205

Gym 102055B Balance of the Force (二分图染色 + 联通块 + 线段树)

题意 给定 n 个物品,该物品放在 A ,B阵营 有不同的价值,ai,bi。现在需要将 每个物品选择一个阵营,使得整体 n 个物品价值的最大值和最小值之差最小。同时有 m 个限制,每个限制 为 (xi , yi )表示 xi 号物品 和 yi号物品不能放在同一阵营。如果加入该限制后无法有一种合理的安排就是输出 IMPOSSIBLE,否则输出最大值和最小值之差的最小值。 ( 1<=n,m&lt...

lalalafloat的博客 581

gym-102055-RSA加密-欧拉降幂

题目链接 gym102055 思路 首先要明白一个模运算的性质 (a ^ b) % p = ((a % p)^b) % p 令e=230+3,r=(q−1)(p−1)令e=2^{30}+3,r=(q-1)(p-1)令e=230+3,r=(q−1)(p−1),找到e在模n下的逆元d,de=1(mod n)找到e在模n下的逆元d,de=1(mod\ n)找到e在模n下的逆元d,de=1(mo...

weixin_44203780的博客 308

蓝桥杯__省赛__第八届__C/C++__大学A组

2016 CCPC 网络赛 AA water problem BZhu and 772002 CMagic boy Bi Luo with his excited tree DDanganronpa ERubik's Cube FRobots GMountain HSpecial Tetrahedron IThis world need more Z...

逐梦者 2605

Redis学习——1. 基础数据结构(二):链表

1.2  链表(Linked List) 1.2.1  介绍 下图(1-4)为Linked List在Redis中的实现: // 节点 typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 值 void *value...

Finalowee的博客 296

K - Video Reviews Gym - 101755K (

The studio «Lodka Gaming» is engaged in advertising of their new game «.C.O.N.T.E.S.T: Unexpected Behaviour». The studio’s marketer is planning to communicate with n videobloggers one by one (in the p...

weixin_44694282的博客 317
上一篇: 【Gym 101775】 H. H. Mr. Panda and Birthday Song(动态规划,分类讨论)
下一篇: 扩展欧几里得算法求解不定方程||中国剩余定理
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值