POJ2513_Colored Sticks_KEY
2024-10-21 23:30:15
题目大意:给你若干根木棍,每根木棍有前后两种颜色,连接两根木棍需要前后颜色相同,求能否将所有木棍连接在一起。
Solution:
不要将木棍看成点,将颜色看成点。
其实就是求是否存在欧拉路径。
有欧拉路径要满足两个条件:
图是连通图。
没有或只有两个入度为奇数的点。
判断连通性用并查集。
枚举每个点判断入度就好了。
code:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; struct trie{
int tr[][],v[],cnt,tot;
trie(){memset(tr,,sizeof tr),memset(v,,sizeof v),cnt=tot=;}
int add(char *a)
{
int len=strlen(a),now=;
for(int i=;i<len;i++){
if(!tr[now][a[i]-'a'])tr[now][a[i]-'a']=++cnt;
now=tr[now][a[i]-'a'];
}
if(!v[now])v[now]=++tot;
return v[now];
}
}T;
char S1[],S2[];
int into[],fa[];
int getf(int x){return x==fa[x]?x:fa[x]=getf(fa[x]);} int main()
{
// freopen("x.txt","r",stdin);
for(int i=;i<=;i++)fa[i]=i;
while(cin>>S1>>S2){
int k1=T.add(S1),k2=T.add(S2);
into[k1]++,into[k2]++;
fa[getf(k1)]=getf(k2);
}
int ans=;
for(int i=;i<=T.tot;i++)
if(fa[getf(i)]==i)ans++;
if(ans>)return puts("Impossible"),;
ans=;
for(int i=;i<=T.tot;i++){
if(into[i]&)ans++;
}
if(!ans||ans==)puts("Possible");
else puts("Impossible");
return ;
}
最新文章
- spring MVC @Resource不支持Lazy加载
- DOS与Linux的换行字符
- C语言 Linux内核链表(企业级链表)
- CSS媒体查询,CSS根据不同的分辨率显示不同的样式
- Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区域
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
- python_基本语法_01
- LeetCode_Simplify Path
- java集合之Map_keySet_entrySet
- dev中 使用一些控件后,窗体屏蔽右键某些菜单
- javascript variables 变量
- NetBox v2.8下载使用指南
- 更改 android realtek的系统权限
- udp和tcp
- python3:操作excel文件
- #if和#ifdef的区别
- python 模块 不可不知的知识点
- 自己DIY出来一个JSON结构化展示器
- 记录一下putty的pscp的用法【转】
- Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用
热门文章
- [WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore
- 【jQuery】todolist
- centos上nginx的安装
- 大话Linux内核中锁机制之原子操作、自旋锁
- JAVA语言编程思维入门
- CentOS7安装Oracle11g R2
- 升级MAC OS到10.13, 10.14系统后UNITY工程无法加载资源的解决办法
- [&#128175;原]Javascript,我们来用js在网页中识别鼠标手势
- UML架构设计师必备神器
- let与var的区别,为什么什么要用let?