是一道歐拉路的題竟然沒看出來......


把每種顏色看成一個點,每根木棍看成一個邊,即相同顏色在圖中接好合併成了一個點,

問題轉化為了求是否存在歐拉路

如果用map會超時,所以可以用字典樹實現離散化/哈希,unordered_map需要c++11

注意判斷圖是否聯通,用并查集即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<unordered_map>
using namespace std;
const int maxn=*;//點數
int x,y,cnt,n;char s[];
int deg[maxn];
int fa[maxn];
int find(int x){
while(x!=fa[x])x=fa[x]=fa[fa[x]];
return x;
}
bool unionn(int x,int y){
x=find(x),y=find(y);
if(x==y)return ;
fa[x]=y;return ;
}
//字典樹
int nod=,root=;
struct node{
int son[],num;
}t[maxn*];
int ask(char *s){
int k=root;char c;
for(int i=;s[i];i++){
c=s[i]-'a';
if(!t[k].son[c])t[k].son[c]=++nod;//動態開點
k=t[k].son[c];
}
if(!t[k].num)t[k].num=++n;
return t[k].num;
}
//unordered_map<string,int>m;
//int ask(char *s){
// return m[s]?m[s]:m[s]=++n;
//}
int main(){
for(int i=;i<=maxn;i++)fa[i]=i;
while(~scanf("%s",s)){
x=ask(s);
scanf("%s",s);
y=ask(s);
if(unionn(x,y))++cnt;
++deg[x],++deg[y];
}
if(cnt<n-){printf("Impossible");return ;}//判聯通
int tot=;//記錄奇點個數
for(int i=;i<=n;i++){
if(deg[i]&)tot++;
if(tot>){printf("Impossible");return ;}
}
printf("Possible");
}

[題解]luogu_P1333瑞瑞的木棍(并查集/圖論)的更多相关文章

  1. Luogu P1333 瑞瑞的木棍 并查集&&字符串?

    把每种颜色看成一个点,然后合并去判联通: 若联通,判一下是不是欧拉图或欧拉路... 还有,我的不是正解,要吸氧才能水过去...QAQ // luogu-judger-enable-o2 // luog ...

  2. [題解](水/并查集)luogu_P2170選學霸

    很簡單的水題,因為智障沒有A所以發篇博客 同樣的題:luogu_P1455 搭配購買 用并查集維護一下所有實力相等的人的size,然而你可以選多個size......,於是跑個背包就行了,只要注意一下 ...

  3. 洛谷P1333 瑞瑞的木棍(欧拉回路)

    题目描述 瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这些木棍连在一起拼成一条线,并且使得木棍与木棍相接触的两端颜色都是相同的,给出每根木棍两端的颜色,请问 ...

  4. [題解]luogu_P1120小木棍(搜索)

    好久以前抄的題解,現在重新抄題解做一下 1.對所有木棍從大到小排序,後用小的比較靈活 2.限制加入的木棍單調遞減,因為先/后用長/短木棍等價,反正就是那兩根 3.預處理出重複木棍的位置,防止重複搜索相 ...

  5. 【u008】瑞瑞的木棍

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这 些木棍连在 ...

  6. 洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 合并果子题目传送门:https://www.luogu.org/problemnew/show/P1 ...

  7. [題解](水/數學)luogu_P1147連續自然數和

    尺取法a掉 然而數學解法為 等差數列求和公式: sum(L,R)=(L+R)(R-L+1)/2=M 即(L+R)(R-L+1)=2M 可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1&l ...

  8. [題解](單調隊列dp)【2016noip福建夏令營】探險

    P1917 -- 探险 时间限制:1000MS      内存限制:131072KB 题目描述(explore.cpp) π+e去遗迹探险,遗迹里有 N 个宝箱,有的装满了珠宝,有的装着废品. π+e ...

  9. [題解](最小生成樹/LCA)luogu_P1967貨車運輸

    一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...

随机推荐

  1. LVS集群中的IP负载均衡技术

    LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...

  2. 动态区间第K大

    整体二分. 主要需要注意的一点是,对于每个删除操作,若删除操作被算入贡献,则最开始的插入操作也一定会被算入,所以不必担心删除删错. #include<cstdio> #include< ...

  3. eclipse配置SVN

    1.设置 maven 工程svn忽略target 最新maven写法忽略的文件,还需忽略target.*/logs. Windows -> Preferences -> Team -> ...

  4. codeforces B. Coach 解题报告

    题目链接:http://codeforces.com/problemset/problem/300/B 题目意思:给出n个students(n%3 = 0),编号依次为1-n,接下来有m行,每行有两个 ...

  5. 英语发音规则---s发/s/的读音规则

    英语发音规则---s发/s/的读音规则 一.总结 一句话总结:字母s的读音有/s/./z/./ʃ/./{/这几种,下面主要讲讲发/s/音的几条规则. 字母s的读音有/s/./z/./ʃ/./{/这几种 ...

  6. java运行Linux命令

    <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UT ...

  7. Failed to import pydot

    在使用keras进行模型绘制的时候,出现了一个错误 Failed to import pydot. You must install pydot and graphviz for `pydotprin ...

  8. CodeForces768B:Code For 1 (分治)

    Jon fought bravely to rescue the wildlings who were attacked by the white-walkers at Hardhome. On hi ...

  9. 「网络流24题」「LuoguP3358」 最长k可重区间集问题(费用流

    题目描述 对于给定的开区间集合 I 和正整数 k,计算开区间集合 I 的最长 k可重区间集的长度. 输入输出格式 输入格式: 的第 1 行有 2 个正整数 n和 k,分别表示开区间的个数和开区间的可重 ...

  10. HDOJ-1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...