首页 > 其他分享 >[ARC165C] Social Distance on Graph

[ARC165C] Social Distance on Graph

时间:2024-02-17 20:23:37浏览次数:28  
标签:Distance smx int Graph mid INT MAX ARC165C mx

转化题意,对图进行黑白染色,求最大的 \(X\) 满足所有 \(u, v\) 间最短路径小于 \(X\) 的 \(u, v\) 异色。

很明显是二分答案,假设现在二分到 \(mid\),转化为判定型问题。

直接 \(n^2\) 枚举点肯定不对。

发现性质:如果 \(u,v\) 的最短路径长度小于 \(X\) 且最短路径上经过的边数大于 \(1\),则一定无法染色。

所以对于所有由两条边组成的路径的最小值应该为二分上界 \(r\)。

确定上界后,只需考虑所有由一条边组成的最短路,即所有边权小于 \(X\) 的边拿出来进行二分图判定。

这样拿出来的边一定是最短路,否则二分上界一定比它小。

本题巧妙运用了二分上界,使得 \(\rm check\) 函数能在正确复杂度内执行。

#define int ll
typedef pair<int, int> PII;
const int N = 2e5 + 5; 
int n, m, mx[N], smx[N]; // 含义相反因为之前写成最大值了
vector <PII> E[N];
int color[N];
bool dfs(int x, int mid, int col)
{
	// cout << x << ' ' << color[x] << "!!!\n";
	if (~color[x]) return color[x] == col;
	color[x] = col;
	for (auto v : E[x])
	{
		if (v.second >= mid) continue;
		if (!dfs(v.first, mid, col ^ 1)) return 0;
	}
	return 1;
}
bool chk(int mid)
{
	R(i, 1, n) color[i] = -1;
	// cout << color[1] << '\n';
	bool res = 1; 
	R(i, 1, n) if (color[i] == -1) if (!dfs(i, mid, 0)) return false; //cout << i << ' ' <<res << endl;
	return true;
}
void solve()
{
	cin >> n >> m;
	int l = 1, r = INT_MAX;
	R(i, 1, n) mx[i] = smx[i] = INT_MAX;
	R(i, 1, m)
	{
		int u, v, w; cin >> u >> v >> w;
		E[u].pb({v, w}); E[v].pb({u, w});
		if (w < mx[u]) smx[u] = mx[u], mx[u] = w;
		else if (w < smx[u]) smx[u] = w;
		if (w < mx[v]) smx[v] = mx[v], mx[v] = w;
		else if (w < smx[v]) smx[v] = w;
	}
	R(i, 1, n) 
	{
		if (smx[i] == INT_MAX) continue;
		r = min(r, (mx[i] == INT_MAX ? 0 : mx[i]) + (smx[i] == INT_MAX ? 0 : smx[i])); 
		// cout << mx[i] << ' ' << smx[i] << endl;
		// cout << r << endl;
	}
	while (l < r)
	{
		int mid = l + r + 1 >> 1;
		if (chk(mid)) l = mid;
		else r = mid - 1;
	}
	cout << l << endl;
}
signed main() 
{
	int T = 1; 
	// read(T); 
	while (T--) solve();
    return 0;
}

标签:Distance,smx,int,Graph,mid,INT,MAX,ARC165C,mx
From: https://www.cnblogs.com/cyyhcyyh/p/18018307

相关文章

  • 《SagDRE: Sequence-Aware Graph-Based Document-Level Relation Extraction with Ada
    代码原文地址关键参考文献:Document-LevelRelationExtractionwithAdaptiveThresholdingand LocalizedContextPooling摘要关系抽取(RE)是许多自然语言处理应用的重要任务,它的目标是从文档中抽取出实体之间的关系。文档级RE任务面临着许多挑战,因为它不仅需要跨句子......
  • 安装FlameGraph工具
    目的:用window10远程在debian12安装FlameGraph1、https://github.com/brendangregg/FlameGraph下载zip2、用xftp将刚才下载得zip拖到debian123、unzip解压即可使用4、举例使用FlameGraph分别执行:perfrecord-F99-a-g--sleep60perfscript|FlameGraph-mas......
  • Android Graphics 多屏同显/异显 - 新年预告
    春节将至,首先祝愿朋友们新年快乐!AndroidGraphics多屏同显/异显-新年预告 -- 点我阅读节前发布最后一篇文章,预告下阶段将要分享的研究成果,主要是Android多屏同显/异显的一些知识。为了能讲清楚底层逻辑,又不要惑于上层复杂的AMS/WMS,特意写作了C++版本的多屏互动的演示......
  • Android Graphics 显示系统 - 如何模拟多(物理)显示屏?
    “ 本着花小钱办大事,不花钱也办事的原则,为了避免花钱买设备,那如何更便捷地学习/测试Android多屏显示的内容呢?本文就给大家介绍一种模拟Android多个物理屏幕显示的方法。” 01—AndroidEmulator旧方式的缺憾 早前的文章中,曾经介绍了使用AndroidEmulator模拟多......
  • 大胆假设小心验证——cf_922_C. XOR-distance
    目录问题概述思路想法参考代码问题反思问题概述给出整数a、b、r,要求输出|(a^x)-(b^x)|的绝对值,其中0<=x<=r(取值都是[0,1e18])思路想法首先是一个位置关系,由于求的是绝对值,所以我们可以假定a>b;第二,我们要做的是异或操作,因此可以将a和b的二进制数写出来,结合异或的特点,可以发......
  • Sparse Graph
    #include<bits/stdc++.h>#defineCLOSEios::sync_with_stdio(false);cin.tie(0);cout.tie(0)constintN=200010,M=2*20010,mod=1e9+7;usingnamespacestd;inth[N],e[M],ne[M],dist[N],idx=0;intn,m,s;boolst[N],direct[N];voidadd(......
  • R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
    原文链接:http://tecdat.cn/?p=23836原文出处:拓端数据部落公众号我们使用R中的igraph包,产生了网络的图形。但是很难将这些图表放到演讲和文章中,因为图表很难根据需要定制。使用igraph中的绘图功能可以得到你想要的结果,但用ggplot对工作更有帮助。所以本文探索了一种在ggplot中创......
  • R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
    原文链接:http://tecdat.cn/?p=23836原文出处:拓端数据部落公众号我们使用R中的igraph包,产生了网络的图形。但是很难将这些图表放到演讲和文章中,因为图表很难根据需要定制。使用igraph中的绘图功能可以得到你想要的结果,但用ggplot对工作更有帮助。所以本文探索了一种在ggplot中创......
  • SciTech-CG-Graphics-Chart-CodeGenerator-PyQtGraph: 基于PyQt的图形绘制以及应用库
    UMLclassdiagram:https://pyqtgraph.readthedocs.io/en/latest/api_reference/uml_overview.htmlFlowChart:https://pyqtgraph.readthedocs.io/en/latest/api_reference/flowchart/index.htmlTheStateMachineFramework¶:https://doc.qt.io/qtforpython-5/overviews/......
  • cd graph
    图论专场Fairy(CF19E)题目大意给出一张无向图,求删除一条边后此图变成二分图的所有删边种类\((n\leq10^4)\)。思路虽然看起来\(O(n^2)\)能过,但其实是过不了的,我们知道,判断二分图的一种方式是判断有无奇环,所以问题变成了删去一条边后图中有无奇环,如果有环重合,可以用类似异或......