【u008】瑞瑞的木棍
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这
些木棍连在一起拼成一条线,并且使得木棍与木棍相接触的两端颜色都是相同的,给出每根木棍两端
的颜色,请问是否存在满足要求的排列方式。
例如,如果只有2根木棍,第一根两端的颜色分别为red,blue,第二根两端的颜色分别为red,yellow,
那么blue---red|red----yellow便是一种满足要求的排列方式。
【输入格式】
输入有若干行,每行包括两个单词,表示一根木棍两端的颜色,单词由小写字母组成,且单词长度不会超过10个字母,最多有250000根木棍。
【输出格式】
如果木棒能够按要求排列,输出Possible,否则输出Impossible
Sample Input1
blue red
red violet
cyan blue
blue magenta
magenta cyan
Sample Output1
Possible
#include <cstdio>
#include <cstring> struct tree//用字典树的方法来获取某个单词的hash值。
{
int hash;
int next[27];
}; int tot = 0, ne[500001], first[500001], en[500001], totm = 0, chudu[500001] = { 0 },temp_tot,tot_v=1;
//用邻接表来存储图的信息。
bool visited[500001] = { 0 };
tree a[800001]; //用数组来模拟链表。 int sear_ch(char s[50])//用字典树。来获取s这个字符串对应的hash值。
{
int l = strlen(s);//获取字符串的长度。
int p = 1;//从根节点开始往下走
for (int i = 1; i <= l; i++)
{
int x = s[i - 1] - 'a' + 1;//把小写字母和数字1..26对应
if (a[p].next[x] == 0)//如果这个节点不存在。则新建一个节点、
{
tot_v++;
a[p].next[x] = tot_v;
}
p = a[p].next[x];//一直往下走。
}
if (a[p].hash == 0)//如果这条路径(这个字符串)之前没人走过,则给其一个新的hash值
a[p].hash = ++tot;
return a[p].hash;//然后直接返回这个值就可以了。。
} void add(int x, int y)//加一条从x指向y的边
{
totm++;
ne[totm] = first[x];//邻接表用的是链式存储的方式。
first[x] = totm;
en[totm] = y;
} void dfs(int now)//这个程序会从最后一个点开始进行dfs看一下能不能走遍所有的点。
{
temp_tot--;//找到了一个点,点的数目就减少。最后看temp_tot是否为0
visited[now] = true;
int temp = first[now];
while (temp != 0)//用邻接表来获取这个点的出度。
{
chudu[now]++;//顺便记录出度
int y = en[temp];
if (!visited[y])//如果没有访问过就访问。
dfs(y);
temp = ne[temp];//寻找下一个出度
}
} int main()
{
char s1[50], s2[50];
while (scanf("%s%s", s1, s2) != -1)//多行输入
{
int x, y;
x = sear_ch(s1);
y = sear_ch(s2);
add(x, y);
add(y, x);
}
temp_tot = tot;//用来递减的temp
if (tot>0) //如果什么都没输入也算是可以的。
dfs(tot);
if (temp_tot != 0)//如果图是不连通的则不能一笔画
{
printf("Impossible");
return 0;
}
int oushu = 0, jishu = 0;//统计奇数的出度和偶数的出度的个数。
for (int i = 1; i <= tot; i++)
if ((chudu[i] % 2) == 0)//其实只要统计奇数的出度的个数就可以了。
oushu++;
else
jishu++;
if (jishu == 0 || jishu == 2)//可以看到只要统计奇数的出度个数就可以。。
printf("Possible");
else
printf("Impossible");
return 0;
}
【u008】瑞瑞的木棍的更多相关文章
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
题目描述 瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这些木棍连在一起拼成一条线,并且使得木棍与木棍相接触的两端颜色都是相同的,给出每根木棍两端的颜色,请问 ...
- 洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 合并果子题目传送门:https://www.luogu.org/problemnew/show/P1 ...
- 洛谷 P1334 瑞瑞的木板==P2664 【题目待添加】
题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000).于是,他神奇地买了一根足够长的木板,长度为 ...
- P1334 瑞瑞的木板 洛谷
https://www.luogu.org/problem/show?pid=1334 题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每 ...
- P1334 瑞瑞的木板
题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000).于是,他神奇地买了一根足够长的木板,长度为 ...
- 洛谷 P1334 瑞瑞的木板
P1334 瑞瑞的木板 题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000).于是,他神奇地买了 ...
- 【u009】瑞瑞的木板
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每 ...
- [題解]luogu_P1333瑞瑞的木棍(并查集/圖論)
是一道歐拉路的題竟然沒看出來...... 把每種顏色看成一個點,每根木棍看成一個邊,即相同顏色在圖中接好合併成了一個點, 問題轉化為了求是否存在歐拉路 如果用map會超時,所以可以用字典樹實現離散化/ ...
- 洛谷.1333.瑞瑞的木棍(欧拉路径 Hash)
题目链接 #include <cstdio> #include <cstring> const int N=2e6+5,M=5e5+5,mod=2e6; const int s ...
随机推荐
- Spring源码分析专题——目录
Spring源码分析专题 -- 阅读指引 IOC容器 Spring源码分析专题 -- IOC容器启动过程(上篇) Spring源码分析专题 -- IOC容器启动过程(中篇) Spring源码分析专题 ...
- 笔记四:onsubmit和onclick的区别
今天碰到关于表单提交的问题,我是用submit还是用onclick好呢,然后我去百度了一下两者的区别: onsubmit只能表单上使用,提交表单前会触发, onclick是按钮等控件使用, 用来触发点 ...
- Node中的JavaScript和浏览器中的JavaScript的区别
浏览器中的JavaScript: 1.基于ECMAscript规范,这个规范规定了语法 2.添加了dom:用来处理文档 document object model 3.添加了BOM:用于操作浏览器 w ...
- 【Educational Codeforces Round 35 D】Inversion Counting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排列中交换任意两个数字. 排列的逆序对个数的奇偶性会发生变化. 翻转这个过程其实就是len/2对数字发生交换. 交换了偶数次的话,不 ...
- HDU 2489 Minimal Ratio Tree(prim+DFS)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- sass工具、相关插件
http://koala-app.com/index-zh.html 下载koala 把css文件夹(包含.scss后缀的文件)整个拖进去: 然后在sublime打开.scss文件编译,自动生成css ...
- LeetCode_Construct Binary Tree from Preorder and Inorder Traversal
一.题目 Construct Binary Tree from Preorder and Inorder Traversal My Submissions Given preorder and ino ...
- [寒江孤叶丶的Cocos2d-x之旅_36]用LUA实现UTF8的字符串基本操作 UTF8字符串长度,UTF8字符串剪裁等
原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net/qq446569365 一个用于UTF8字符串操作的类.功能比較 ...
- Altium Designer如何统一调整标号大小,在pcb环境下
- 第一个hello word 驱动载入失败--------
今天尝试自己载入第一个驱动模块,依据惯例hello word 然后失败了,如今说明我的操作过程.请个位看看. 首先我的内核版本号: 模块代码与MAKEFILE #include<linux/in ...