【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 ...
随机推荐
- int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....
Android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null..空指针问题,费劲心思才找到报空指针的原因: 代码 ...
- THC=TERMINAL HANDLING CHARGE,碼頭操作費
THC=TERMINAL HANDLING CHARGE,碼頭操作費
- 7.3 GROUP BY的“新”功能
7.3 GROUP BY的"新"功能正在更新内容,请稍后
- 对DataTable进行过滤筛选的一些方法Select,dataview
当你从数据库里取出一些数据,然后要对数据进行整合,你很容易就会想到: DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM ...
- 解决Win8/8.1无法正确识别USB3.0的问题
找一个USB3.0的移动硬盘到了手里竟然变成2.0的了!二了! 不能忍啊. 听说是快速启动的问题,但是开机速度快很诱人. 百度了其他解决方法,终于解决了. 下面摘录自: http://blog.csd ...
- 【LeetCode-面试算法经典-Java实现】【199-Binary Tree Right Side View(从右边看二叉树)】
[199-Binary Tree Right Side View(从右边看二叉树] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 代码下载[https://github.co ...
- android之路Gallery 画廊
Gallery是一个内部元素能够水平滚动,而且能够把当前选择的子元素定位在它中心的布局组件. 我们还是直接看看样例的执行效果. watermark/2/text/aHR0cDovL2Jsb2cuY3N ...
- numpy,scipy,pandas 和 matplotlib
numpy,scipy,pandas 和 matplotlib 本文会介绍numpy,scipy,pandas 和 matplotlib 的安装,环境为Windows10. 一般情况下,如果安装了Py ...
- echarts3.0 仪表盘实例更改完成占用率实例
需要完成的项目效果 官方实例效果 基本思路: 首先引入jquery和echarts3.0库. 需要两个仪表盘,一个仪表盘是纯色灰色,在底部.startAngle 和endAngle永远是最大值,默认为 ...
- Loadrunner--集合点
集合点的意思是等到特定的用户数后再一起执行某个操作,比如一起保存,一起提交(我们通常意义上的并发数并不是指一起提交或者一起保存),一般情况下使用不到集合点,不过,订票系统或者促销类需要用到,比如说某个 ...