POJ 2778

题意:很Uva项链题目类似。

区别:

1、字符串很多,用map hash超时,用Trie查找。

2、DFS判断连通,和并查集判连通,被我写错的地方时,查森林的时候,还是要Find_Set。

  1 #include <iostream>
  2 #include <cstring>
  3 #include <cstdio>
  4 #include <algorithm>
  5 
  6 using namespace std;
  7 
  8 const int maxnode = 250000*2;
  9 const int sigma_size = 26;
 10 
 11 struct Trie {
 12     int ch[maxnode][sigma_size];
 13     int val[maxnode];
 14 
 15     int sz;
 16     Trie() {sz=1;memset(ch[0],0,sizeof(ch[0]));}
 17     int idx(char c) {return c - 'a';}
 18 
 19     void insert(char* s,int v) {
 20         int u = 0,n = strlen(s);
 21         for(int i=0;i<n;i++) {
 22             int c = idx(s[i]);
 23             if(!ch[u][c]) {
 24                 memset(ch[sz],0,sizeof(ch[sz]));
 25                 val[sz] = 0;
 26                 ch[u][c] = sz++;
 27             }
 28             u = ch[u][c];
 29         }
 30         val[u] = v;
 31     }
 32 
 33     bool que(char* s) {
 34         int u = 0,n = strlen(s);
 35         for(int i=0;i<n;i++) {
 36             int c = idx(s[i]);
 37             if(!ch[u][c])
 38                 return false;
 39             u = ch[u][c];
 40         }
 41         return true;
 42     }
 43 
 44     int values(char* s) {
 45         int u = 0,n = strlen(s);
 46         for(int i=0;i<n;i++) {
 47             int c = idx(s[i]);
 48             u = ch[u][c];
 49         }
 50         //printf("%d\n",val[u]);
 51         return val[u];
 52 
 53     }
 54 
 55 }sol;
 56 
 57 char str1[50],str2[50];
 58 
 59 int degree[maxnode];
 60 int father[maxnode];
 61 
 62 int find(int x)
 63 {
 64     if(x != father[x])
 65     father[x] = find(father[x]) ;
 66     return father[x] ;
 67 }
 68 void merge(int x,int y)
 69 {
 70     int fx = find(x) ;
 71     int fy = find(y) ;
 72     if(fx != fy)
 73     father[fx] = fy ;
 74 }
 75 
 76 int main()
 77 {
 78     //freopen("in.txt","r",stdin);
 79     int kk = 0;
 80 
 81     memset(degree,0,sizeof(degree));
 82 
 83     for(int i=0;i<maxnode;i++)
 84         father[i] = i;
 85 
 86 
 87     while(scanf("%s%s",str1,str2)!=EOF) {
 88         if(sol.que(str1)==false)
 89             sol.insert(str1,kk++);
 90         if(sol.que(str2)==false)
 91             sol.insert(str2,kk++);
 92 
 93         int u,v;
 94         u = sol.values(str1);
 95         v = sol.values(str2);
 96 
 97         //printf("%d %d\n",u,v);
 98 
 99         degree[u]++;
100         degree[v]++;
101 
102         merge(u,v);
103     }
104 
105     int s = find(0);
106     int num = 0;
107     for(int i=0;i<kk;i++)
108     {
109         if(degree[i]%2==1)
110             num++;
111 
112         if(num>2)   //度数为奇数的结点数大于3,欧拉路必不存在
113         {
114             cout<<"Impossible"<<endl;
115             return 0;
116         }
117 
118         if(find(i)!=s)   //存在多个祖先,图为森林,不连通
119         {
120             cout<<"Impossible"<<endl;
121             return 0;
122         }
123     }
124 
125     if(num==1) //度数为奇数的结点数等于1,欧拉路必不存在
126         cout<<"Impossible"<<endl;
127     else       //度数为奇数的结点数恰好等于2或不存在,存在欧拉路
128         cout<<"Possible"<<endl;
129 
130     return 0;
131 }
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/7200951.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux挂载VMFS硬盘,ESX4.1挂载NFS共享存储(VMkernel)

要使用vmotion,iscsi,nfs功能&#xff0c;必须启用VMkernel端口&#xff0c;ESX 4.1默认不启用&#xff0c;ESXi 5.x默认启用。在 vCenter Server“SZVCENTER01”上调用对象“datastoreSystem-44”的“HostDatastoreSystem.CreateNasDatastore” 失败。挂载NFS存储的ESX控制台命…

Perl学习之四:语句(续)

循环控制&#xff1a;1.last 退出标签的语句块2.next 3.redo不推荐&#xff0c;循环次数不可控 4.goto不推荐。***************************************标签&#xff1a; 先定义一个 labellast|next|redo|goto label&#xff1b; last VS next 相当于C语言中的&#xff1a;las…

2017年8个最流行的Web编程趋势

互联网一直在不断的发展&#xff0c;这意味着开发人员必须及时了解当前的所有变化。人们在新闻、社交、购物到银行等各大方面都与互联网有着千丝万缕的联系。因此&#xff0c;为了满足全球数百万网络用户的需求&#xff0c;Web开发需求正在上升。Web编程趋势是在W开发的过程中不…

linux 分卷压缩到指定目录,运用在android下Linux分卷压缩与分卷解压的命令

protected static Vector execRootCmd(String paramString) {Vector localVector new Vector();try {Process localProcess Runtime.getRuntime().exec("su ");// 经过Root处理的android系统即有su命令OutputStream localOutputStream localProcess.getOutputStre…

gRPC-rs:从 C 到 Rust

介绍 在上篇文章中&#xff0c;我们讲到 TiKV 为了支持 [gRPC]&#xff0c;我们造了个轮子 [gRPC-rs]&#xff0c;这篇文章简要地介绍一下这个库。首先我们来聊聊什么是 gRPC。gRPC 是 Google 推出的基于 [HTTP2] 的开源 RPC 框架&#xff0c;希望通过它使得各种微服务之间拥有…

红帽linux无法进入tty,linux自启脚本(以及无法进入tty控制台)

1.建立需开机运行的脚本auto(可以不要后面的.sh后缀)2.放在/etc/init.d/目录下 (操作系统复制命令&#xff0c;在当前文件夹下复制sudo cp auto /etc/init.d)[可能先要对init.d取得x权限]3.赋予权限&#xff0c;在init.d文件目录下sudo chmod 775 ./auto4.执行&#xff0c;命…

【最短路】SDUT3034--炸学校

炸学校 Time Limit: 2000ms Memory limit: 65536K 有疑问&#xff1f;点这里^_^ 题目描述 “小儿么小二郎&#xff0c;背着那炸弹炸学校&#xff0c;不怕那太阳晒&#xff0c;也不怕那风雨狂。”估计这首歌我们大家都耳熟能详了。于是就有一群小学生们商量着炸学校。要把本…

管控研发部门USB设备

前提背景&#xff1a;研发部门图纸经常泄漏&#xff0c;领导说要管控USB,但是要能读&#xff0c;只限制不能写。本想大力推荐Devicelock&#xff0c;因费用原因没了后话&#xff0c;只好使用最基本的域策略进行实施.51CTOblog传图片这么麻烦&#xff0c;还是全部写文字好了。实…

linux系统编程练手项目,精选 22 个 C++ 项目,编程小白练手首选!

C/C 做为元老级的编程语言&#xff0c;任时光更迭依旧屹立不倒&#xff0c;哪怕现在煊赫一时的AI&#xff0c;其底层也是用其编写。linux那么做为新手该如何快速上手 C 呢&#xff1f;固然是敲代码啊&#xff01;一切不写代码的学编程都是瞎搞。下面为你们精选了 22 个 C 项目&…

Swift iOS : WebView缓存图片的方法

广告 Swift iOS开发小书 &#xff0c;帮你快速上手开发 www.ituring.com.cn/book/2413 正文 每次加载WebView内容&#xff0c;如果图片可以缓存的话&#xff0c;速度就会非常快。默认情况下&#xff0c;WebView自己来加载图片&#xff0c;缓存的策略也是自己定的。如想要自己缓…

linux怎么同时查看两个文件,MultiTail - 在单个Linux终端中同时监视多个文件

无论是服务器管理员还是程序员&#xff0c;我们需要参考多个日志文件来有效地排除故障任务。 为了实现这一点&#xff0c;我们必须打开&#xff0c;拖尾或更少的不同shell中的每个日志文件。 但是&#xff0c;我们可以使用传统的tail命令状尾-f在/ var / log / messages文件或尾…

新一代蓝牙5标准开启 会成为物联网的最佳选择吗

在过去&#xff0c;蓝牙在生活中最常见的应用就是键盘、鼠标、音箱和蓝牙耳机&#xff0c;这些传输对频宽要求不高&#xff0c;蓝牙技术的采用不仅节省了线材成本&#xff0c;还增加了产品的灵活性。蓝牙技术联盟(SIG)正式宣布推出新一代标准蓝牙5(Bluetooth 5)&#xff0c;其主…

今日BBC

1、随身英语 Dry January 新年戒酒一个月 link 2、地道英语 Hot potato 棘手的问题“烫手山芋” link 3、今日新闻 Brussels attacks: Belgian police arrest six suspects link The arrests were made in the Schaerbeek district. There is no word yet on the identitie…

c语言中的指针语法,C语言中指针的用法介绍

C语言中指针的用法介绍for(int i0;i{num*s;s;}return num;)这个例子中的函数 fun统计一个字符串中各个字符的 ASCII 码值之和。前面说了&#xff0c;数组的名字也是一个指针。在函数调用中&#xff0c;当把 str 作为实参传递给形参 s后&#xff0c;实际是把 str 的值传递给了 s…

实验吧 貌似有点难 伪造ip

解题链接&#xff1a; http://ctf5.shiyanbar.com/phpaudit/ 解答&#xff1a; 点击View the source code —>代码显示IP为1.1.1.1即可得到KEY—>使用modify header伪造IP—>拿到flag 相关&#xff1a; modify header我也是第一次用&#xff0c;下面附上相关说明&…

用C语言用指针怎么算通用定积分,C语言:利用指针编写程序,用梯形法计算给定的定积分实例...

题目要求利用指针编写程序&#xff0c;用梯形法计算下列公式中的定积分&#xff1a;参考代码首先说明一下指针的用处&#xff1a;因为所传递的参数均为数字&#xff0c;并不需要使用指针提高效率&#xff0c;故这里使用指针指向函数。请注意calc()函数中的这一语句&#xff1a;…

单点登录系统cas资料汇总

http://jasig.github.io/cas/4.0.x/index.html 主页https://jasigcas.herokuapp.com demohttps://wiki.jasig.org/display/CASUM/Home 4.x之前的文档http://jasig.github.io/cas/4.1.x/index.html …

有限小数用c语言,分数化为有限小数或无限循环小数(c实现)

问题描述&#xff1a;将分数转化为小数&#xff0c;相信很多人都会吧&#xff0e;那么&#xff0c;这里给定一个分数N/D,N为分子&#xff0c;D为分母(N,D均为整数)&#xff0c;试编程求出N/D的小数形式&#xff0c;当然如果这个小数为无限循环小数&#xff0c;则把循环的部分用…

你该把前端外包出来了

2019独角兽企业重金招聘Python工程师标准>>> 移动热潮慢慢褪去&#xff0c;大的几个app已经霸占了所有的人桌面&#xff0c;而微信却变得越来越重要。微信里面&#xff0c;提倡H5的应用&#xff0c;H5应用开发成本低、上线快、易调整、跨平台等诸多优势&#xff0c;…

R 统计学工具部署和使用

由于公司内部对于市场数据分析的需求&#xff0c;要求引入R统计工具&#xff0c;并集成到报表工具中。对于R的介绍&#xff0c;大家请百度一下&#xff0c;当然&#xff0c;最好能去看官方的说明 https://www.r-project.org/ 下面简单介绍一下R工具的安装和数据分析工具Spotfir…