正题

题目链接:https://www.luogu.com.cn/problem/P6378


题目大意

给出nnn个点mmm条边的一张无向图,图中有kkk种颜色的点。

要求每种颜色选择一个点作为关键点,满足每条边两边至少有一个关键点

求是否有满足的方案

1≤n,m,k≤1061\leq n,m,k\leq 10^61≤n,m,k≤106


解题思路

如果想到2−SAT2-SAT2−SAT的话就挺好解决的了。

然后一个经典的问题是一堆点里面选了一个点就不能选其他点。

可以考虑优化建图,搞一些前缀点和一些后缀点就好了

时间复杂度O(n)O(n)O(n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int N=5e6+10;
struct node{int to,next;
}a[N<<1];
int n,m,k,cnt,tot,dfc,cfc;
int ls[N],dfn[N],low[N],col[N];
bool ins[N];vector<int> v[N];
stack<int> s;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void tarjan(int x){dfn[x]=low[x]=++dfc;s.push(x);ins[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(ins[y])low[x]=min(low[x],dfn[y]);}if(low[x]==dfn[x]){++cfc;while(s.top()!=x){col[s.top()]=cfc;ins[s.top()]=0;s.pop();}col[s.top()]=cfc;ins[s.top()]=0;s.pop();}return;
}
int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x*2-1,y*2);addl(y*2-1,x*2);}cnt=2*n;for(int i=1;i<=k;i++){int w,x;scanf("%d",&w);v[i].push_back(0);for(int j=1;j<=w;j++){scanf("%d",&x);v[i].push_back(x);}cnt++;addl(cnt,v[i][1]*2-1);for(int j=2;j<=w;j++){addl(v[i][j]*2,cnt);++cnt;addl(cnt,cnt-1);addl(cnt,v[i][j]*2-1);}cnt++;addl(cnt,v[i][w]*2-1);for(int j=w-1;j>=1;j--){addl(v[i][j]*2,cnt);++cnt;addl(cnt,cnt-1);addl(cnt,v[i][j]*2-1);}}for(int i=1;i<=cnt;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)if(col[2*i]==col[2*i-1])return puts("NIE")&0;puts("TAK");return 0;
}

P6378-[PA2010]Riddle【2-SAT】相关推荐

  1. P6378 [PA2010] Riddle(2-sat/前后缀优化建图)

    P6378 [PA2010] Riddle n个点m条边的无向图,分为k个部分,从每个部分选择恰好一个关键点,使得每条边至少有一个端点是关键点. 首先有这么多的限制,实际上就是一个选或者不选的问题,每 ...

  2. BZOJ3495 PA2010 Riddle 【2-sat】

    题目链接 BZOJ3495 题解 每个城市都有选和不选两种情况,很容易考虑到2-sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一 ...

  3. P6378 [PA2010] Riddle 2-sat + 前缀和优化建图

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点mmm调变的无向图被分成kkk个部分,每个部分包含若干点,请选择一些关键点,使得每个部分恰好有一个关键点,且每条边至少有一个是关键点. 1≤k, ...

  4. 【American English】美式发音,英语发音,美国音音标列表及发音

    1 [American English]美式发音,英语发音,美国音音标列表及发音 2 [American English]美语的连读规则 3 [American English]美语口语中常见的 Go ...

  5. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★

    文章目录 一.P 类 二.NP 类 三.NPC 类 ( NP 完全 ) 四.P .NP .NPC 三者关系 一.P 类 P\rm PP 类 : ★ 所有 能够被 确定性 单个带子图灵机 , 在 多项式 ...

  6. 【计算理论】计算复杂性 ( 多项式时间规约 | NP 完全 ★ | 布尔可满足性问题 ) ★

    文章目录 一.多项式时间规约 分析 二.NP 完全 ★ ( 计算理论最重要的概念 ) 一.多项式时间规约 分析 多项式时间规约概念 : [计算理论]计算复杂性 ( 多项式等价引入 | 多项式时间规约 ...

  7. 实战SSM_O2O商铺_41【前端展示】店铺列表页面Dao+Service+Controller层的实现

    文章目录 概述 Dao层 接口 映射文件 单元测试 Service层 接口方法 单元测试 Controller层 增加 ShopListController 单元测试 Github地址 概述 在完成了 ...

  8. 【Linux部署】NTP时间服务器搭建及Linux+Windows客户端使用(一篇学会使用NTP服务)

    1.什么是NTP 百度百科:网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同 ...

  9. 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型

    前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法 6.操作方 ...

  10. 【Applied Algebra】可满足性模理论(Satisfiability Modulo Theories)入门

    [Applied Algebra]可满足性模理论(Satisfiability Modulo Theories)入门 摘要:SMT问题是在特定理论下判定一阶逻辑公式可满足性问题.它在很多领域,尤其是形 ...

最新文章

  1. 李宏毅机器学习笔记(二)-------Why we need learn Machine Learning?
  2. 【万级并发】电商库存扣减如何设计?不超卖!
  3. 三次元风景照秒变宫崎骏动画,还能把石原里美吉卜力化,AnimeGAN已开源
  4. Android数据填充器LayoutInflater
  5. python3(八)sys模块
  6. hdu 4324 Triangle LOVE
  7. 关于栈的链式存储结构
  8. black-box优化——第二篇:直接搜索算法
  9. html/jquery最实用功能与注意点
  10. JavaScript内存泄漏的几种情况
  11. 爆干3天整理出来,408考研计算机网络复习笔记(更新中)
  12. 解决AxureRP经常性损坏问题
  13. phpwamp mysql_PHPWAMP配置修改与Web服务器和php以及mysql的具体配置修改
  14. 有个exe文件删不掉怎么办
  15. 计算机发展对文学的影响,论计算机技术对文学接受的影响
  16. mysql rename数据库_为什么现在MySQL无法重命名数据库?
  17. 关于varying的理解
  18. 手机满信号无法连接服务器,手机信号满格却不能连接网络,为什么会出现这种状况?...
  19. IO多路复用底层原理及源码解析
  20. 【哈利波特·魔法觉醒】手记全攻略

热门文章

  1. docker 查看容器_Docker介绍
  2. 随机加解密java_JAVA随机数生成 Math.random和java.util.Random使用简介
  3. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)
  4. python怎么样另存为_python要怎么保存python生成式
  5. xilinx7中管脚mrcc和srcc_Xilinx 7系列FPGA架构之SelectIO结构(一)
  6. sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意
  7. java 实现 指派_TAP任务指派问题的汇编实现
  8. PTA 数据结构与算法题目集(中文)
  9. Pandas中的 transform() 结合 groupby() 用法示例
  10. [蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs