Description

有n个城镇被分成了k个郡,有m条连接城镇的无向边。要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都。

Input

第一行有三个整数,城镇数n(1<=n<=10^6),边数m(0<=m<=10^6),郡数k(1<=k<=n)。

接下来m行,每行有两个整数ai和bi(ai≠bi),表示有一条无向边连接城镇ai和bi。

接下来k行,第j行以一个整数wj开头,后面是wj个整数,表示第j个郡包含的城镇。

Output

若有解输出TAK,否则输出NIE。

每个点 $x$ 拆成两对点,$x$ 代表选择 $x$ 为首都,$x+n$ 表示不选择 $x$ 为首都,$x+2n$ 表示 $x$ 的前缀已包含首都,$x+3n$表示 $x$ 的前缀不包含首都。

对于每一条原图中无向边 $(x,y)$ ,因为至少有一个端点为首都,连边 $(x+n,y)$ ,$(y+n,x)$。

对于每一个点 $x$ ,连边 $(x,x+2n)$ ,$(x+3n,x+n)$。

对于每一个点 $x$ 与它的上一个点 $last$ ,连边方式如下:$(last+2n,x+2n)$,$(x+3n,last+3n)$,$(last+2n,x+n)$,$(x,last+3n)$。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define LL long long
 5 using namespace std;
 6 const int N=4e6+5;
 7 int n,m,k,cnt,x,y,last,tim,top,color;
 8 int first[N],dfn[N],low[N],sta[N],c[N];
 9 bool vis[N];
10 struct edge{int to,next;}e[N*3];
11 void ins(int u,int v){e[++cnt]=(edge){v,first[u]};first[u]=cnt;}
12 int read()
13 {
14     int x=0,f=1;char c=getchar();
15     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
16     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
17     return x*f;
18 }
19 void tarjan(int x)
20 {
21     low[x]=dfn[x]=++tim;
22     sta[++top]=x;vis[x]=true;
23     for(int i=first[x];i;i=e[i].next)
24     {
25         int to=e[i].to;
26         if(!dfn[to])tarjan(to),low[x]=min(low[x],low[to]=min(low[x],low[to]));
27         else if(vis[to])low[x]=min(low[x],dfn[to]);
28     }
29     if(low[x]==dfn[x])
30     {
31         color++;
32         while(sta[top]!=x)vis[sta[top]]=false,c[sta[top--]]=color;
33         vis[x]=false;c[x]=color;top--;
34     }
35 }
36 bool check()
37 {
38     for(int i=1;i<=n;i++)
39         if(c[i]==c[i+n]||c[i+2*n]==c[i+3*n])return false;
40     return true;
41 }
42 int main()
43 {
44     n=read();m=read();k=read();
45     for(int i=1;i<=m;i++)
46     {
47         x=read();y=read();
48         ins(x+n,y);ins(y+n,x);
49     }
50     for(int i=1;i<=k;i++)
51     {
52         x=read();last=0;
53         for(int j=1;j<=x;j++)
54         {
55             y=read();
56             ins(y,y+2*n);ins(y+3*n,y+n);
57             if(last)
58             {
59                 ins(last+2*n,y+2*n);
60                 ins(y+3*n,last+3*n);
61                 ins(last+2*n,y+n);
62                 ins(y,last+3*n);
63             }
64             last=y;
65         }
66     }
67     for(int i=1;i<=4*n;i++)if(!dfn[i])tarjan(i);
68     if(check())printf("TAK");
69     else printf("NIE");
70     return 0;
71 }

View Code

转载于:https://www.cnblogs.com/zsnuo/p/8940074.html

【bzoj 3495】PA2010 Riddle相关推荐

  1. 【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)

    题干: osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串. ...

  2. 【BZOJ 2820】YY的GCD

    [BZOJ 2820]YY的GCD Problem Description 给定\(N\), \(M\),求\(1\le x\le N\), \(1\le y\le M\) 且 \(gcd(x,y)\ ...

  3. 【BZOJ 2820】 YY的GCD

    2820: YY的GCD Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 807   Solved: 404 [ Submit][ Status] ...

  4. 【BZOJ 2823】 [AHOI2012]信号塔

    2823: [AHOI2012]信号塔 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 469  Solved: 198 [ Submit][ Sta ...

  5. 【BZOJ 3926】【ZJOI 2015】 诸神眷顾的幻想乡

    [BZOJ 3926/ZJOI 2015] 诸神眷顾的幻想乡 [广义SA/广义SAM] 没想到陈立杰居然玩旧作- 题意: \;\;\;\;啊?~幻想乡?~一个树状太阳花田上每个点都有人穿着 c c种颜 ...

  6. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  7. 【最小树形图(奇怪的kruskal)】【SCOI 2012】【bzoj 2753】滑雪与时间胶囊

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB Submit: 1621 Solved: 570 Description ...

  8. 【BZOJ 1036】[ZJOI2008]树的统计Count

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1036 [题意] [题解] 树链剖分入门题; 每一条链维护一个线段树就好; uppest ...

  9. JZOJ 2256. 【BZOJ 2256】【ZJOI 2008】树的统计

    Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...

最新文章

  1. Opengl编程学习笔记(五)——从FRAGMENT到PIXEL(framebuffer 帧缓存)
  2. Objective-C语言中对象相等性与指针相等分析。
  3. linux序列比对程序,序列比对软件简单使用教程
  4. 使用git pull文件时和本地文件冲突怎么办
  5. Java并发编程(02):线程核心机制,基础概念扩展
  6. HTML keygen控件
  7. 2021年德国汽车产量预计同比锐减18%
  8. Ant 构建文件的一种写法
  9. Linux 下Jetty 部署 项目 JNDI 数据源加载
  10. 自学资料总结(持续更新)
  11. java 修改分辨率_JAVA程序分辨率修改及自适屏修改
  12. Moore-Penrose广义逆矩阵
  13. 制作3D实时交互影像产品,需要用到的技术和软件!
  14. Eclipse官网快速下载
  15. Android 8.1 从零开始写 HAL -- (2) 实现 HAL 主体
  16. 2020.10.22--AI--立体图形制作、矛盾空间图形设计、3D文字
  17. Google产品经理面试题:村子里有100对夫妻,其中每个丈夫都瞒着自己的妻子偷情......
  18. Android模糊查询(首字母、简拼、全拼,汉字)
  19. Sidney网站分析感悟:无细分,毋宁死
  20. web UI自动化 python+selenium 爬取网易云排行榜歌曲列表

热门文章

  1. 计算机软件专业 课程,_计算机软件_专业的课程设置.pdf
  2. 不能用了 重装系统git_重装新版gitlab时遇到gitlab-rails database初始化失败
  3. 通达信指标转python_通达信转势买入指标公式
  4. win8安装mysql8_windows安装mysql8详解
  5. 中山网络推广浅析网站优化在选择关键词时需要掌握的关键性原则是什么?
  6. 网络营销专员浅析如何以低成本高获取实现网络营销?
  7. 新晋小白怎样才能做好seo优化
  8. java子类参数传递给父类_java – 为什么调用将父类作为参数的方法调用,而不是将子类作为参数获取的方法?...
  9. 服务器传感器不显示,服务器传感器不显示
  10. parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的column使用列存储格式,这样获取某一row数据时候不需要跨机器获取...