首页 > 其他分享 >[atARC153F]Tri-Colored Paths

[atARC153F]Tri-Colored Paths

时间:2023-05-22 13:34:55浏览次数:42  
标签:Tri 颜色 Colored int atARC153F dfn low 否则 环上

称一条边在环外当且仅当其两端点不全在环上

用总方案数减去不合法的方案数,并分类讨论——

  • Case1:图中不存在某种颜色的边

  • 否则,若存在简单环的颜色集合为\(\{1,2,3\}\),则环上每种颜色的边恰有一条

    否则,若颜色为\(1\)的边数\(\ge 2\),则去掉其中一条后得到的简单路径矛盾

    记环上的节点为\(a_{[1,3]}\)(其中\(a_{i}\)的对边颜色为\(i\)),则\(a_{i}\)环外的出边颜色为\(i\)

    否则,若\((a_{1},x)\)的颜色为\(2\),则\(x-a_{1}-a_{2}-a_{3}\)矛盾

    • Case2:仅有至多一个\(a_{i}\)有出边,则环外的边颜色均为\(i\)

    • 否则,若\(a_{i},a_{j}\)同时有出边,则出边(唯一且)端点相同

      否则,若\((a_{1},x),(a_{2},y)\),则\(x-a_{1}-a_{2}-y\)矛盾

      Case3:记该端点为\(z\),结合\((z,a_{i},a_{j})\),整张图至多再有一条\((z,a_{6-i-j})\)的边

  • 否则,若存在简单环的颜色集合为\(\{1,2\}\),则环外的边颜色不为\(3\)

    否则,取该边到环上的一条路径,并将第一个交点两旁的一边断开后与环拼接

    显然两边不可能均为唯一的\(1,2\),矛盾

    由于存在颜色为\(3\)的边,其两端点均在环上,进而得到颜色集合为\(\{1,2,3\}\)的简单环

    (颜色集合为\(\{1,3\}\)或\(\{2,3\}\)类似)

  • 否则,即所有简单环上的边颜色均相同,进而每个点双内的边颜色均相同

    建立圆方树,问题即给每个方点(代表点双)染色,使得圆点间满足条件

    类似前者,讨论每个圆点周围方点的颜色集合,最终仅有以下情况——

    Case4:某个……颜色集合为\(\{1,2,3\}\),且删去其后每块内方点颜色均相同

时间复杂度为\(O(n)\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200005,mod=998244353;
int n,m,x,y,ans,st[N],dfn[N],low[N],cnt[N];
vector<int>e[N];
int add(int x,int y){
	x+=y;
	return (x<mod ? x : x-mod);
}
int qpow(int n,int m){
	int s=n,ans=1;
	while (m){
		if (m&1)ans=(ll)ans*s%mod;
		s=(ll)s*s%mod,m>>=1;
	}
	return ans;
}
int calc(int n){
	return (qpow(3,n)+3LL*(mod-qpow(2,n))+3)%mod;
}
void dfs(int k,int fa){
	st[++st[0]]=k;
	dfn[k]=low[k]=++dfn[0];
	for(int i:e[k])
		if (i!=fa){
			if (!dfn[i]){
				dfs(i,k),low[k]=min(low[k],low[i]);
				if (dfn[k]<=low[i]){
					cnt[k]++;
					while (st[st[0]]!=i)cnt[st[st[0]--]]++;
					cnt[st[st[0]--]]++;
				}
			}
			else low[k]=min(low[k],dfn[i]);
		}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		e[x].push_back(y);
		e[y].push_back(x);
	}
	ans=calc(m);
	for(int i=1;i<=n;i++)
		if (e[i].size()==2){
			for(int j:e[i])
				if (e[j].size()==2){
					if ((j^e[i][0]^e[i][1])==(i^e[j][0]^e[j][1]))ans=add(ans,mod-3);
				}
		}
	if ((n==3)&&(m==3))ans=add(ans,12);
	if ((n==4)&&(m>4))ans=add(ans,mod-6);
	dfs(1,0);
	for(int i=1;i<=n;i++)ans=add(ans,mod-calc(cnt[i]));
	printf("%d\n",ans);
	return 0;
}

标签:Tri,颜色,Colored,int,atARC153F,dfn,low,否则,环上
From: https://www.cnblogs.com/PYWBKTDA/p/17420357.html

相关文章

  • 【iOS开发】UIWebView调用JS点击事件(stringByEvaluatingJavaScriptFromString)
    一、场景描述产品需求是移动端app要调用h5页面,然后监听h5代码中的某个方法,最终执行h5中的具体代码。二、具体代码.m文件@interfaceViewController()<UIWebViewDelegate>@property(nonatomic,strong)UIWebView*webView;@end@implementationViewController-(void)viewDid......
  • Sequence Trigger
    SQL>SQL>createsequencesq12startwith13incrementby14minvalue15maxvalue99999996nocycle7nocache8noorder;SequencecreatedSQL>SQL>createorreplacetriggerpn_trigger2beforeinsertonusers......
  • SigNoz采集springboot应用metries、trace
    设置从repo的 Releases下载opentelemetry-javaagent.jar并将JAR放在您的首选目录中。JAR文件包含代理和检测库。opentelemetry-java-instrumentation添加-javaagent:path/to/opentelemetry-javaagent.jar和其他配置到您的JVM启动参数并启动您的应用程序:直接在启动命令上:java......
  • ICS TRIPLEX工业通讯模块T8110B
    W;① ⑧ 0 ③  0 ① ⑦  7  7 ⑤  9ICSTRIPLEX工业通讯模块T8110B,T8403,T8431,T8403,T8461,T8461C,T8110B,T8403。T8403C,T9432,T9110,T9451,ICSTRIPLEX工业通讯模块T8110B,T8403,T8431,T8403,T8461是电喷发动机控制系统中最重要的传感器之一。发动机转速传感器的作......
  • as3 图像颜色渐变中使用matrix
    graphics 对象也可以绘制渐变笔触和填充,而不是纯色笔触和填充。渐变笔触是使用 lineGradientStyle() 方法创建的;渐变填充是使用 beginGradientFill() 方法创建的。 这两种方法接受相同的参数。前四个参数是必需的,即类型、颜色、Alpha 以及比率。其余四个参数是可选的,但对于......
  • 【如何实现tinySTL】实现小型的vector string 将 string 放入vector中
    语法细节类内的静态(static)成员在类外定义的时候不加statictypename的作用1.一种是在声明模板类、模板函数的参数的时候2.还有一种是在取别名的时候std::enable_if的几种用法定义cincoutendl都是什么endl是一个函数参数是basic_ostreamcincout是两个对象【在指定的地址构造......
  • QT 字符串和数字拼接 QString int 拼接 显示在 label 标签中
    变量:i=0;拼接后显示到界面的label标签中。方法一:QStringsucc=QString("连接成功:%1").arg(i++);ui->label->setText(succ);方法二:QStringsucc=QString("%1%2").arg("连接成功:").arg(i++);ui->label->setText(succ);效果......
  • Jmeter函数助手16-FiletoString
    FiletoString函数用于获取文本文件的值,一次读取一行,可读取多个文件。输入文件的全路径:填入文件路径存储结果的变量名(可选)Startfilesequencenumber(opt):初始序列Finalfilesequencenumber(opt):终止序列1、StringFromFile函数跟组件CSV数据文件设置的区别是:CSV数据......
  • org.apache.jasper.JasperException: /pages/role-list.jsp (行.: [145], 列: [8]) 根
    org.apache.jasper.JasperException:/pages/role-list.jsp(行.:[145],列:[8])根据标记文件中的TLD或attribute指令,attribute[items]不接受任何表达式 web.xml中版本号不兼容产生的问题;解决方法:<%@taglibprefix=“c”uri=“http://java.sun.com/jstl/core”%>改为<%@t......
  • Jmeter函数助手15-FiletoString
    FiletoString函数用于一次读取整个文件值。输入文件的全路径:填入文件路径Fileencodingifnottheplatformdefault(opt):读取文件的编码格式,不传则默认使用系统格式存储结果的变量名(可选)1、首先我的文件内容是4行2列,如下2、调用FiletoString函数会一次性输入多行多列的......