2695: 旅游胜地(2-SAT)

该博客主要介绍了如何利用二分搜索和2-SAT算法解决一个旅游胜地的差值问题。题目要求找到一组城市之间的最大差值,使得所有城市对之间的差值不超过这个值。博主通过详细解析题目,阐述了如何构建图并应用2-SAT算法来判断条件是否满足,最后给出了完整的C++代码实现。
摘要由CSDN通过智能技术生成

2695: 旅游胜地

题目大意

中文题,大意就剩略了吧。

解题思路

这也题看了以后感觉是二分+2-SAT但是不知道具体的怎么去建图。一直卡着。后来看了大佬的博客后突然明白了,电子竞技菜是原罪呀! 我们对于每一条边,分别判断如果 u 取a数组的值, v 取b数组的值。判断下这差值是否大于 二分枚举的值,如果大于就选择建这个边对于另外的点之间建边。每次建完图以后,判断是否满足2-SAT的情况。这样枚举下去即可。具体的建边可以看代码。

代码

#include<bits/stdc++.h>
using namespace std;
const int mx=200100;
#define ll long long

int u[mx],v[mx]; 
vector<int> ve[mx];
int dfn[mx],low[mx];
int col[mx];
int sum,cnt,n,m;
int a[mx],b[mx];
bool vis[mx];
stack<int> st;
void tarjon(int x){
   
	dfn[x]=low[x]= cnt++;
	st.push(x);
	vis[x]=1;
	for(int v:ve[x]){
   
		if(!dfn[v]){
   
			tarjon(v);
			low[x]=min(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值