首页 > 其他分享 >Holes To Fill

Holes To Fill

时间:2024-07-12 20:41:01浏览次数:10  
标签:dfs int Holes scc vis low id Fill

2-SAT

souvenir

一般就是每个变量为 \(0 / 1\),给出很多个关于两个变量的约束然后求解啥的。下文设 \(x\) 表示 \(1\),\(x'\) 表示 \(0\)。比如 \(x \oplus y = 1\),则连边 \(x \to y'\),\(x' \to y\),\(y \to x'\),\(y' \to x\)(单向的)。

faire

可以暴力 DFS。时间复杂度 \(\mathcal O(n ^ 2)\)。

bool dfs(int u) { // 这份代码 u ^ 1 为反集
	if (vis[u]) return true;
	if (vis[u ^ 1]) return false;
	vis[u] = true;
	s.push(u);
	for (const int &v : e[u])
		if (!dfs(v))
			return false;
	return true;
}


for (int i = 0; i < 2 * n; i += 2)
	if (!vis[i] && !vis[i + 1]) {
		while (s.size()) s.pop();
		if (!dfs(i)) {
			while (s.size()) vis[s.top()] = false, s.pop();
			if (!dfs(i + 1)) return cout << "NIE" << endl, 0;
		}
	}
for (int i = 0; i < 2 * n; i += 2)
	if (vis[i + 1]) cout << i + 2 << endl;
	else cout << i + 1 << endl; // 这个是当时编号,输出加了 1

也可以用 Tarjan 强连通分量缩点,根据所在强连通分量编号确定。时间复杂度 \(\mathcal O(n + m)\)。

void dfs(int u, int fa) {
	dfn[u] = low[u] = ++cnt;
	s.push(u);
	for (const int &v : e[u]) {
		// if (v == fa) continue;
		if (!dfn[v]) {
			dfs(v, u);
			low[u] = min(low[u], low[v]);
		}
		else if (!scc_id[v]) low[u] = min(low[u], dfn[v]);
	}
	if (low[u] == dfn[u]) {
		int t;
		scc_cnt++;
		do {
			t = s.top(); s.pop();
			scc_id[t] = scc_cnt;
		} while (t != u);
	}
}

for (int i = 1; i <= 2 * n; i++)
	if (!dfn[i]) dfs(i, i);
for (int i = 1; i <= n; i++)
	if (scc_id[i] == scc_id[i + n])
		return cout << "IMPOSSIBLE" << endl, 0;
cout << "POSSIBLE" << endl;
for (int i = 1; i <= n; i++)
	cout << (scc_id[i] > scc_id[i + n]) << " ";

quelque chose

如果要确定字典序最小啥的,只能上 DFS。

关于 DFS 解的构造,看代码 \(vis\) 数组显然;关于 Tarjan 解的构造,如果 \(x\) 和 \(x'\) 在同一 SCC 中无解,否则设 \(scc\_id_i\) 表示 \(i\) 的 SCC 编号,选更小的就好。也就是说,如果 \(scc\_id_x < scc\_id_{x'}\) 就选 \(x\),否则选 \(x'\)。证明见 解的构造

如果强制 \(x\) 为 \(0\),可以连边 \(x \to x'\),vice versa。感性理解就是”即使你选了 \(1\),也给我走另一条路到 \(0\)“。

一道题目中,不同的 \(x\) 和 \(x'\) 含义可能不同,但是只要每个 \(x\) 只有 \(x\) 和 \(x'\) 就能 2-SAT。如 游戏

Tarjan 相关

souvenir

主要是割点、割边(桥)、点双连通分量、边双连通分量、强连通分量。

标签:dfs,int,Holes,scc,vis,low,id,Fill
From: https://www.cnblogs.com/liuzimingc/p/18183119/holes-to-fill

相关文章

  • OpenCV中绘制多边形的函数:fillPoly与polylines
    一、函数接口介绍1.1fillPoly函数这是个重载函数,有2个实现,具体如下:1、重载1voidfillPoly(Mat&img,constPoint**pts,constint*npts,intncontours,constScalar&color,intlineType......
  • WPF Stretch None,Fill,Uniform,UnformToFill
    None, Thecontentpreservesitsoriginalsize.<ImageSource="/WpfApp169;component/cl.jpg"Stretch="None"/> Fill,Thecontentisresizedtofillthedestinationdimensions.Theaspectratioisnotpreserved.<ImageSource=......
  • CF797F Mice and Holes
    CF797FMiceandHoles线性dp+单调队列优化可以发现,进同一个洞的老鼠是一段连续的区间,所以考虑dp。设\(f_{i,j}\)表示前\(i\)个洞进了\(j\)只老鼠的最小总距离,转移枚举第\(i\)个洞中的老鼠对应的区间,然后要预处理出\(g_{i,j}\)表示前\(i\)只老鼠进第\(j\)个洞的......
  • vue3 + arcgis.js4.x---面SimpleFillSymbol
    //polygonconstpolygonGraphic=newGraphic()polygonGraphic.geometry={type:'polygon',rings:[[117.227239,31.820586],[116.227239,33.820586],[117.227239,33.820586]]}polygonGraphic.symbol=newSimpleFillSymbol({......
  • 解决canvas上fillText填充后用clearRect清除失效,文字重叠问题
    最初写的demo:如下图: 文字内容未被清除掉,出现了重叠的问题,尝试了网上说的ctx.save(),ctx.restore(),beginPath()等方法都不好用,后来经过一番查找,终于解决了:改写如下: 在这里需要主要的点就是fillText的方法里参数表示的真正含义: 默认情况下,文本基线是位于文字底部,所......
  • CF1228E Another Filling the Grid 题解
    tag:容斥原题+组合数设F[i]F[i]F[i]表示至少......
  • polyfill
    Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Map、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。举例来说,ES6在Array对象上新增了Array.from方法。Babel就不......
  • Another Filling the Grid
    AnotherFillingtheGrid题目信息题目描述Youhave$n\timesn$squaregridandaninteger$k$.Putanintegerineachcellwhilesatisfyingtheconditionsbelow.Allnumbersinthegridshouldbebetween$1$and$k$inclusive.Minimumnumberofth......
  • C++ vector 避免 fill 0
    我们在profiler的时候有的时候发现memset占用热点比较高。而且是std::vector::resize带来的。这个明显是没必要的,例如:std::vector<int>result;//这里resize会fill0result.resize(input_rows);for(inti=0;i<input_rows;++i){result[i]=transfer(input[i])......
  • ECShop电商商城wholesale_flow接口处存在SQL注入漏洞
    ECShop电商商城wholesale_flow接口处存在SQL注入漏洞FOFA语句app="ECSHOP"app="ECSHOP"&&icon_hash="-164358497"SQL注入漏洞POST/wholesale_flow.php?step=ajax_update_cartHTTP/1.1Host:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64......