【POJ 2513】Colored Sticks
2015-08-02 21:29
225 查看
【POJ 2513】Colored Sticks
并查集+字典树+欧拉通路
第一次做这么混的题。。太混了……
不过题不算难 字典树用来查字符串对应图中的点 每个单词做一个点(包括重复单词
题意就是每个边走且直走一次(欧拉通路
欧拉图的判定: 没有或者只有两个奇数度的点的图叫做欧拉图
有这些就可以解答此题了
另外需要注意题目范围是25W个木棍 所以最多可能有50W个点 卡了好多个RE
代码如下:
并查集+字典树+欧拉通路
第一次做这么混的题。。太混了……
不过题不算难 字典树用来查字符串对应图中的点 每个单词做一个点(包括重复单词
题意就是每个边走且直走一次(欧拉通路
欧拉图的判定: 没有或者只有两个奇数度的点的图叫做欧拉图
有这些就可以解答此题了
另外需要注意题目范围是25W个木棍 所以最多可能有50W个点 卡了好多个RE
代码如下:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <cmath> #define LL long long #define INF 0x3f3f3f3f using namespace std; typedef struct Trie { int dic[26]; int data; }Trie; Trie tr[777777]; int in[555555]; int pre[555555]; int tp,data; int SetNode() { memset(tr[tp].dic,-1,sizeof(tr[tp].dic)); tr[tp].data = -1; return tp++; } int Get(int site,char *ch) { int i,k; for(i = 0; ch[i]; ++i) { if(tr[site].dic[ch[i]-'a'] == -1) { k = SetNode(); tr[site].dic[ch[i]-'a'] = k; }else k = tr[site].dic[ch[i]-'a']; site = k; } if(tr[site].data == -1) tr[site].data = data++; return tr[site].data; } int Find(int x) { return pre[x] = ( (pre[x] == x)? pre[x]: Find(pre[x])); } int main() { char a[23],b[23]; int i,aa,bb,j,f,k,r; tp = data = j = 0; SetNode(); for(i = 0; i < 250050; ++i) pre[i] = i; memset(in,0,sizeof(in)); while(~scanf("%s %s",a,b)) { aa = Get(0,a); bb = Get(0,b); k = Find(aa); r = Find(bb); pre[k] = r; in[aa]++; if(in[aa]&1) j++; else j--; in[bb]++; if(in[bb]&1) j++; else j--; } int cnt=0; for(int i=0;i<data;i++) { if(pre[i]==i) cnt++; } if((cnt==1||cnt==data)&&(j==0||j==2)) puts("Possible"); else puts("Impossible"); return 0; }
相关文章推荐
- Sublime text 3 注册码
- Sublime text 2 注册码
- 【Objective-C编程】Objective-C的基本数据类型
- Ubuntu14.04安装Matlab2014a
- HDU1083 Courses 二分匹配
- angularJS 服务--$provide里factory、service方法
- 利用box-shadow制作loading图
- angularJS 服务--$provide里factory、service方法
- Frequentist和Bayesian的差别
- repair windows ntfs part on ubuntu
- Python网络编程之TCP通信实例和socketserver框架使用例子
- Linux学习笔记02之文件管理
- linux下打开windows txt文件中文乱码解决方法
- LeetCode242——Valid Anagram
- zoj 3460 Missile 【二分 + 二分图匹配】 【经典建模】 【二分 + 最大流】
- 递归函数的非递归化
- angularJS--多个控制器之间的数据共享
- java中文件的绝对路径,相对路径和抽象路径
- 异常类
- Binary Tree Maximum Path Sum