【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 ...
随机推荐
- BZOJ5137: [Usaco2017 Dec]Standing Out from the Herd(广义后缀自动机,Parent树)
Description Just like humans, cows often appreciate feeling they are unique in some way. Since Farme ...
- Centos下Elasticsearch安装详细教程
Centos下Elasticsearch安装详细教程 1.Elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 ...
- Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集
m种阳离子 n种阴离子 然后一个m*n的矩阵 第i行第j列为1代表第i种阴离子和第j种阴离子相互吸引 0表示排斥 求在阳离子和阴离子都至少有一种的情况下 最多存在多少种离子能够共存 阴阳离子都至少须要 ...
- ImageButton-设置background跟src
xml中添加ImageButton的background跟src <ImageButton android:id="@+id/tv3" android:layout_widt ...
- R语言-方差分析
方差分析指的是不同变量之间互相影响从而导致结果的变化 1.单因素方差分析: 案例:50名患者接受降低胆固醇治疗的药物,其中三种治疗条件使用药物相同(20mg一天一次,10mg一天两次,5mg一天四次) ...
- Android RxBus的实现及简单使用
RxJava目前已经很火了,如果你尚未了解请看这里.对于RxJava这里不多做介绍.RxBus并不是一个库,而是一种模式.相信大多数开发者都使用过EventBus,作为事件总线通信库,如果你的项目已经 ...
- Android Intent的setClass和setClassName的区别
setClass:跳转到与该工程下的(同一个Application中的)activity或者service setClassName:跳转到不同Applicaiton的activity或者servic ...
- golang sort
package main import ( "fmt" "strings" "sort" ) type Animals []string f ...
- Bootstrap时间控件常用配置项
1.给下面4个文本框初始化 $(function(){ $("#orderStartTime,#orderEndTime,#preSaleStartTime,#preSaleEndTim ...
- webpack4 多页面,多环境配置,逐行解释
项目需求制作为新的app的分享页,故需要制作多页面应用,那既然app是新的,这边我们也要更新上,经过多方考察(度娘)下,综合了一些他人的优点并结合项目实况产生了此文. 本文为了解释详细,篇幅可能会较长 ...