首页 > 其他分享 >[题解]P1333 瑞瑞的木棍

[题解]P1333 瑞瑞的木棍

时间:2024-12-27 20:34:28浏览次数:6  
标签:ma 瑞瑞 int 题解 ++ find fa 节点 P1333

P1333 瑞瑞的木棍

我们将颜色看作节点,每个木棍左右的两个颜色之间连接无向边。

可以用并查集维护连通性,每添加一条边\((u,v)\)就合并\(u,v\)所在集合,最终所有节点都在一个集合中\(\iff\)该图联通。

在回顾下无向图存在欧拉通路的判定条件,满足其一即可:

  • 无向图是欧拉图\(\iff\)非零度节点连通,所有节点度数为偶
  • 无向图是半欧拉图\(\iff\)非零度节点连通,恰有\(2\)个节点度数为奇

注意颜色个数最多是\(2\times\)木棍个数,所以节点数要\(\times 2\)。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 500010
using namespace std;
int n,fa[N],deg[N];
string s,t;
unordered_map<string,int> ma;
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
bool solve(){
	for(int i=2,p=find(1);i<=n;i++) if(find(i)!=p) return 0;
	int odd=0;
	for(int i=1;i<=n;i++) odd+=(deg[i]&1);
	return odd==0||odd==2;
}
signed main(){
	while(cin>>s>>t){
		if(!ma[s]) n++,fa[n]=ma[s]=n;
		if(!ma[t]) n++,fa[n]=ma[t]=n;
		int u=ma[s],v=ma[t];
		deg[u]++,deg[v]++;
		u=find(u),v=find(v);
		if(u!=v) fa[u]=v;
	}
	cout<<(solve()?"Possible\n":"Impossible\n");
	return 0;
}

附上有向图版本:UVA10129 单词 Play on Words题解

标签:ma,瑞瑞,int,题解,++,find,fa,节点,P1333
From: https://www.cnblogs.com/Sinktank/p/18636659

相关文章

  • Centos7下yum安装报错问题解决方法Cannot find a valid baseurl for repo: base/7/x86
    Cannotfindavalidbaseurlforrepo:base/7/x86_64 目录Cannotfindavalidbaseurlforrepo:base/7/x86_64 原因如下:1.网络问题2.错误的YUM源配置3.代理设置问题 原因如下:1.网络问题首先,检查系统的网络连接是否正常,可以通过以下命令测试:ping......
  • [题解]UVA10129 单词 Play on Words
    UVA10129单词PlayonWords将各字母看做节点,单词的首字母向尾字母连一条有向边。最终如果该图存在欧拉通路,则答案合法。回顾一下欧拉通路的判定:有向图是欧拉图\(\iff\)非零度节点弱连通,每个节点出入度相等有向图是半欧拉图\(\iff\)非零度节点弱连通,恰有一个节点出度\(-\)入......
  • 【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode
    文章目录有效的数独解数独单词搜索黄金矿工不同的路径|||有效的数独递归解法思路将每个数独的格子视为一个任务,依次检查每个格子是否合法。如果当前格子中的数字违反了数独规则(在行、列或3×3小方块中重复),直接返回False。递归检查下一个格子,直到所有格子都检......
  • Pycharm 2024.3 安装详细教程与激活方法(附常见问题解决)
    Pycharm概述Pycharm是JetBrains公司推出的一款功能强大的Python集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本Pycharm如果您的电脑中已经安装了旧版本的......
  • 机器分配(assigned) 题解
    题目在主页include<bits/stdc++.h>usingnamespacestd;inta[15][25],f[15][25];voiddg(intdep,intmax,intrest){if(dep==0)return;inti;for(i=0;i<=rest;i++)if(max==f[dep-1][i]+a[dep][rest-i])break;dg(dep-1,f[dep-1][i]......
  • leetcode热题100(48. 旋转图像)简单清晰题解c++
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3......
  • 题解:CF2051C Preparing for the Exam
    CF2051CPreparingfortheExam思路其实莫非就三种情况:所有题目都会:所有试卷也都会。有\(\ge2\)道题目不会:所有试卷都不会。有\(1\)道题目不会:假设这道题目是\(x\),那么遍历数组\(q\)寻找是否有\(q_i=x\),如果有则输出\(1\),否者输出\(0\)。AC代码时间复杂度为......
  • 题解:CF2051D Counting Pairs
    CF2051DCountingPairs思路首先给数组排个序,然后再暴力枚举\(i\),不难发现所有符合的\(j\)一定是连续的,所以再二分计算出符合数列的开头以及结尾。AC代码#include<bits/stdc++.h>usingnamespacestd;#defineN300005longlongt,n,x,y,a[N],ans,sum;intmain(){ ci......
  • 题解:CF2051B Journey
    CF2051BJourney思路先计算\(a,b,c\)都一定会走的次数,也就是\(n/(a+b+c)\),记结果\(num\),为然后再一个一个枚举:剩下的\(n=0\):答案为\(num\cdot3\)剩下的\(n\lea\):答案为\(num\cdot3+1\)剩下的\(a\ltn\lea+b\):答案为\(num\cdot3+2\)剩下的\(a+b\ltn\):答案为......
  • 2023年12月GESPC++四级真题解析
    一、单选题(每题2分,共30分)题目123456789101112131415答案ABDCCCABAADACBB1.下面有关函数参数的说法,正确的是()。A.函数参数传递时,主函数当中采用值传递方式将参数传递给子函数时,若子函数将参数值改变,主函数当中的参数值不变。B.函数参数传......