首先,如果这个图本身就不存在欧拉回路,那么显然无解。

对于每个子串:

1.如果里面有不存在的边,那么显然无解。

2.如果里面有一条边重复出现,那么显然也无解。

3.对于每条边,维护其前驱与后继,若前驱或后继超过$1$个,那么显然也无解。

如此所有边将形成一条条链或者环的结构,如果存在环,那么显然也无解。

对于每条链,在新图中添加链头到链尾的边,然后判断新图中是否存在从$1$开始的欧拉回路即可。

时间复杂度$O(m\log m)$。

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=50010,M=200010;
int n,m,q,i,j,k,pos,cnt,d[N],a[M],b[M],last[M],pre[M],nxt[M];
int g[N],V[M],W[M],NXT[M],vis[M],ed;
struct E{int x,y;}e[M];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline bool cmp(const E&a,const E&b){return a.x==b.x?a.y<b.y:a.x<b.x;}
void NIE(){puts("NIE");exit(0);}
inline int ask(int x,int y){
int l=1,r=m,mid;
while(l<=r){
mid=(l+r)>>1;
if(e[mid].x==x&&e[mid].y==y)return mid;
if(e[mid].x<x||e[mid].x==x&&e[mid].y<y)l=mid+1;else r=mid-1;
}
return 0;
}
inline void add(int x,int y,int z){d[x]++,d[y]--;V[++ed]=y;W[ed]=z;NXT[ed]=g[x];g[x]=ed;}
void dfs(int x){
for(int&i=g[x];i;){
if(vis[i]){i=NXT[i];continue;}
vis[i]=1;
dfs(V[i]);
}
}
int main(){
read(n),read(m);
for(i=1;i<=m;i++)read(e[i].x),read(e[i].y),d[e[i].x]++,d[e[i].y]--;
for(i=1;i<=n;i++)if(d[i])NIE();
sort(e+1,e+m+1,cmp);
read(q);
for(pos=1;pos<=q;pos++){
read(k);
for(i=1;i<=k;i++)read(a[i]);
for(i=1;i<k;i++){
b[i]=ask(a[i],a[i+1]);
if(!b[i])NIE();
if(last[b[i]]==pos)NIE();
last[b[i]]=pos;
}
for(k--,i=1;i<k;i++){
if(!nxt[b[i]])nxt[b[i]]=b[i+1];
else if(nxt[b[i]]!=b[i+1])NIE();
if(!pre[b[i+1]])pre[b[i+1]]=b[i];
else if(pre[b[i+1]]!=b[i])NIE();
}
}
for(i=1;i<=n;i++)d[i]=0;
for(i=1;i<=m;i++)if(!pre[i]){
for(k=0,j=i;j;j=nxt[j])a[++k]=j,cnt++;
add(e[i].x,e[a[k]].y,a[k]);
}
if(cnt<m)NIE();
if(!g[1])NIE();
for(i=1;i<=n;i++)if(d[i])NIE();
dfs(1);
for(i=2;i<=n;i++)if(g[i])NIE();
return puts("TAK"),0;
}

  

BZOJ1515 : [POI2006]Lis-The Postman的更多相关文章

  1. bzoj 1515 [POI2006]Lis-The Postman 有向图欧拉回路

    LINK:Lis-The Postman 看完题觉得 虽然容易发现是有向图欧拉回路 但是觉得很难解决这个问题. 先分析一下有向图的欧拉回路:充要条件 图中每个点的入度-出度=0且整张图是一个强连通分量 ...

  2. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

  3. postman使用

    1.postman的下载:google首页左上角应用,点击后,如果没有下载postman,就在google商店搜索,点击右边按钮 2.下载后重新打开google首页,点击应用,可以看到已经下载过了,点 ...

  4. Lis日常维护

    1.[问题]护士站打印LIs条码,出来是PDF格式的 [解决]在文件夹Client\NeusoftLis\Xml\Print.xml中把BarcodePrint Name的值改成安装的斑马打印机名(不 ...

  5. uva10635 LIS

    Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n c ...

  6. 复习(2)【postman,charles,filezilla server】

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.通常我们可以用它来测试接口. Charles是在Mac下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的 ...

  7. Codeforces 486E LIS of Sequence 题解

    题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是. 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两 ...

  8. postman 断言解析

    最近在学习postman官方文档, 顺势翻译出来,以供学习! postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言会在请求返回之后,运行,并根据断言的pa ...

  9. postman发送带cookie的http请求

    1:需求:测试接口的访问权限,对于某些接口A可以访问,B不能访问. 2:问题:对于get请求很简单,登录之后,直接使用浏览器访问就可以: 对于post请求的怎么测试呢?前提是需要登录态,才能访问接口. ...

随机推荐

  1. Scrapy 框架 安装

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  2. 天财商龙SQL查询ID登陆POS情况

    SELECT * FROM [tcgem_client0001].[dbo].[TCB_POS] ' --查询ID登陆POS情况

  3. 如何设置Navicat的显示字体与字体大小?

    方法/步骤     打开Navicat   点击[工具]菜单,再选择[选项]   在[选项]界面,点击[外观]下的[字体]   设置网格字体和大小   设置编辑器字体和大小   设置命令列界面字体和大 ...

  4. webpack学习笔记--配置devServer

    devServer 1-6 使用DevServer 介绍过用来提高开发效率的 DevServer ,它提供了一些配置项可以改变 DevServer 的默认行为. 要配置 DevServer ,除了在配 ...

  5. [转] webpack之前端性能优化(史上最全,不断更新中。。。)

    最近在用webpack优化首屏加载性能,通过几种插件之后我们上线前后的速度快了一倍,在此就简单的分享下吧,先上个优化前后首屏渲染的对比图. 可以看到总下载时间从3800ms缩短到1600ms. 我们在 ...

  6. 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2)

    前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并 ...

  7. H.265:网络视频的高清时代

    去年八月,爱立信公司推出了首款H.265编解码器,而在仅仅六个月之后,国际电联(ITU)就正式批准通过了HEVC/H.265标准,标准全称为高效视频编码(High Efficiency Video C ...

  8. ng2tree在ios中无法触发click

    问题描述: 从其他页面跳转回ng2tree的页面时,无法触发节点的click事件 解决方案: 1. 在node_modules中搜索onNodeSeclected方法,修改click为touchend ...

  9. Linux批量清空当前目录中的日志文件

    在Linux中,有时需要批量清空当前目录中的日志文件,同时还要保留日志文件. 其实一行shell命令就可以搞定,一起来看看吧. 在当前目录下,键入如下命令: for i in `find . -nam ...

  10. Python知识回顾 —— 面向对象

    博客转载自 http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/linhaifeng/articles/62040 ...