博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2513 Colored Sticks
阅读量:5207 次
发布时间:2019-06-14

本文共 1805 字,大约阅读时间需要 6 分钟。

题意:有一些棒子,每一根的两头都有两个颜色,将这些棒子相连并且被两根棒子接头处是相同的颜色,求一些这样的棒子是否都可以全部连起来;

思路:首先用tree树给每一种颜色编号,然后用并查集+欧拉路(只有两个或零个奇数结点);

代码:

View Code
#include 
#include
#include
#include
using namespace std; int f[500010] = {
0}; int n = 0; int nn[500010] ={
0}; struct node {
int num; node *next[27]; }; node *head = NULL; node *temp = NULL; node * get() {
temp = new node; for(int i = 0;i < 27; ++i) temp->next[i] = NULL; temp->num = 0; return temp; } void init() {
head = get(); for(int i = 0;i < 500010; ++i) {
f[i] = i; nn[i] = 0; } n = 0; } char a[15] = {
0}; char b[15] ={
0}; int x = 0; int y = 0; int qq(char *s) {
node *temp1 = head; int q = 0; for(int i = 0; s[i]; ++i) {
q = s[i] - 'a'; if(temp1->next[q] == NULL) temp1->next[q] = get(); temp1 = temp1->next[q]; } if(temp1->num != 0) return temp1->num; else {
++n; temp1->num = n; return n; } } int find(int x) {
if(x != f[x]) f[x] = find(f[x]); return f[x]; } void unio(int a,int b) {
int x = find(a); int y = find(b); if(x != y) f[x] = y; } bool check() {
int num = 0; int tt = find(1); for(int i = 1;i <= n; ++i) {
if(find(i) != tt) return 0; if(nn[i]%2) ++num; } if(num == 0 || num == 2) return 1; return 0; } int main() {
//freopen("input.txt","r",stdin); init(); while(scanf("%s%s",a,b) != EOF) {
x = qq(a); ++nn[x]; y = qq(b); ++nn[y]; unio(x,y); } if(check()) printf("Possible\n"); else printf("Impossible\n"); return 0; }

转载于:https://www.cnblogs.com/LT-blogs/archive/2012/03/22/2412735.html

你可能感兴趣的文章
对伪静态网站实施注射
查看>>
个人作业1——四则运算题目生成程序(基于控制台)
查看>>
创建Oracle synonym 详解
查看>>
【SQL】181. Employees Earning More Than Their Managers
查看>>
uva 1335 Beijing Guards
查看>>
php7 新特性整理
查看>>
Nodejs.Electron(Nodejs的图形界面开发)安装和试用
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
20190716NOIP模拟赛T2 通讯(tarjan缩点+贪心)
查看>>
退出shell 脚本
查看>>
Lua 字符串
查看>>
markdown简单语法总结
查看>>
一些基础的定义及事实集合
查看>>
linux查看端口占用
查看>>
hdu - 1226 超级密码 (bfs)
查看>>
Qt重写paintEvent方法遇到的问题
查看>>
Sql常见面试题 受用了
查看>>
关闭进程&关闭消息队列
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
vim在同一个窗口中同时编辑多个文件
查看>>