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控制台命…

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

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

gRPC-rs:从 C 到 Rust

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

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

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

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

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

今日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…

实验吧 貌似有点难 伪造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;…

你该把前端外包出来了

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…

Android下创建一个输入法

输入法是一种可以让用户输入文字的控件。Android提供了一套可扩展的输入法框架&#xff0c;使得应用程序可以让用户选择各种类型的输入法&#xff0c;比如基于触屏的键盘输入或者基于语音。当安装了特定输入法之后&#xff0c;用户即可在系统设置中选择个输入法&#xff0c;并在…

eclipse创建android工程,在eclipse创建android 工程

1.在工具栏选择"New".在弹出对话框里&#xff0c;开打android文件夹&#xff0c;选择"android application Project"&#xff0c;选择“Next”.2.Application Name: 应用程序名称。Projetc Name: 工程名称。Packet Name: 包名称. 注意&#xff0c;包名称…

android导航二级分类,Android实现腾讯新闻的新闻类别导航效果

效果图如下所示&#xff1a;1、在Adapter中加入如下代码private int clickTemp -1;//TODO 被选择的item下标/** * TODO 传入下标&#xff0c;设置被选择的item * * param position */public void setSelection(int position) {clickTemp position;}2、在Adapter的getView方法…

Linux下访问window挂载的磁盘

点击window挂在的磁盘,如下图左侧"文档". 出现如下错误: Error mounting /dev/sda3 .... Command-line mount -t "ntfs" -o "uhelperudisks2 修复办法: sudo ntfsfix /dev/sda6 参考资料: 1. win8安装ubuntu后不能访问windows其他磁盘转载于:https:…

(转)如果知道dll文件是面向32位系统还是面向64位系统的?

本文为转载文章&#xff0c;原文地址&#xff1a;http://www.cnblogs.com/qguohog/archive/2011/09/13/2174897.html&#xff0c;仅仅是记录供后续使用&#xff0c;如有侵权请通知删除。 在发布dll时&#xff0c;可以选择编译为x86模式、x64模式以及Any Cpu模式等。那么对于已经…

Spring Roo 简介

一直以来&#xff0c;Java/Spring开发被认为是笨重的代表&#xff0c;无法快速生成项目原型和骨架。所以&#xff0c;Spring推出了Spring Roo这个项目&#xff0c;帮助我们快速生成项目原型。本文参考自Spring Roo的官方文档&#xff0c;如果熟悉英文的话可以直接看原文档&…

Windows—JDK安装与环境变量配置

本文介绍JDK的安装与环境变量配置。 工具/原料 JDK1.8.0_65WIN7 32bitjdk-8u65-windows-i586.exe方法/步骤 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk &#xff0c;第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。&…

实现物联网项目,你需要提前知道的6件事情

目前为止&#xff0c;对于大多数寻求数字化与服务化转型的制造商来说&#xff0c;实现物联网应用项目仍然是一个很大的挑战。 我们此前做过一项研究&#xff0c;到2016年底,全球企业级物联网项目将超过10000个。但是其中大部分的项目都还是处于初期概念验证(PoC)阶段&#xff0…

Android笔记(六十七) 自定义控件

实际编程中&#xff0c;系统提供的控件往往无法满足我们的需求&#xff0c;一来是样子丑陋&#xff0c;二来是一些复杂的组合需要多次使用的话&#xff0c;每次都写一堆控件的组合会很耗费时间&#xff0c;所以我们将这些组件的组合自定义为一个新的控件&#xff0c;以后使用的…

Linux系统rootpassword改动

重新启动系统。 进入系统引导界面&#xff1a; 按下e键&#xff1a; 选择第二项。内核启动參数设置&#xff0c;按下e键&#xff1a; 在结尾处&#xff0c;输入数字 1或者 英文 " single"&#xff0c;再回车&#xff1a; 按下b键启动。此时以单用户模式级别引导启动程…