P6378-[PA2010]Riddle【2-SAT】

正题

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


题目大意

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

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

求是否有满足的方案

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


解题思路

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

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

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

时间复杂度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;
}

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

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

相关文章

后缀数组(讲解)

子串&#xff1a;从原串中选取连续的一段&#xff0c;即子串 空串也是子串 后缀&#xff1a;suf(k)为s(k…n)构成的子串 任何子串都是某个后缀的前缀 最长公共前缀 lcp(suf(i),suf(j)) 问题&#xff1a; 将所有后缀suf(1),suf(2),suf(N)按照字典序从小到大排序 暴力sort N2 …

codeforces1471 D. Strange Definition

D. Strange Definition 大佬题解 由lcm(x,y)xygcd(x,y)lcm(x,y)\frac{xy}{gcd(x,y)}lcm(x,y)gcd(x,y)xy​可知&#xff0c;如果lcm(x,y)gcd(x,y)xygcd2(x,y)\frac{lcm(x,y)}{gcd(x,y)}\frac{xy}{gcd^2(x,y)}gcd(x,y)lcm(x,y)​gcd2(x,y)xy​是完全平方数&#xff0c;那么xyxy…

2018 上海.NET职位围观报告

我一直说我是夏眠动物&#xff0c;如今已经11月份了&#xff0c;差不多也该活过来了&#xff0c;所以我决定写篇文章给各位.NET的支持者们和公司打打气&#xff0c;也算是为社区做点贡献吧。我最近主要干了两件事&#xff1a;让NPOI支持.NET Core&#xff0c;现已发布2.4版本。…

P5437-[XR-2]约定【拉格朗日差值,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 nnn个点的完全图&#xff0c;连接i,ji,ji,j的边权值为(ij)k(ij)^k(ij)k。随机选出一个生成树&#xff0c;求期望边权和。 1≤n<998244353,1≤k≤1071\leq n<998244353,1\leq k\leq 10^71≤n<99824435…

【模板】分散层叠算法(P6466)

正题 P6466 题目大意 给你 k 个大小为 n 的数组&#xff0c;有q次询问&#xff0c;每次询问回答x在k个数组中的后继的异或和 解题思路 分散层叠模板 code #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll …

后缀数组(后续)

文章目录**后缀数组 Height**两个子串最长公共前缀**求Height数组**比较一个字符串的两个子串的大小关系不同子串的数目出现至少k次的子串的最大长度**总结&#xff1a;**代码&#xff1a;后缀数组 Height 利用后缀数组快速求出2个后缀的lcp长度 lcp:最长公共前缀 lcp(suf(i),…

codeforces1472 G. Moving to the Capital

G. Moving to the Capital 先bfs一边&#xff0c;求出距1号点的最短路用数组d1[]记录&#xff0c;求的过程中如果当前点t遍历到之前遍历过的点j意味着这条边就是能够拉近与1号点距离的边&#xff08;横向边或者后向边&#xff09;那么就用d1[j]更新d2[t]&#xff0c;d2[]表示最…

P3793-由乃救爷爷【分块,ST表】

正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出nnn个数字的一个序列mmm次询问区间最大值 保证数据随机 1≤n,m≤21071\leq n,m\leq 2\times 10^71≤n,m≤2107 解题思路 使用STSTST表可以做到O(1)O(1)O(1)询问&#xff0c;但是预处理的时空复杂度都是…

【DP】Mod Mod Mod(CF889E)

正题 CF889E luogu 题目大意 给你 n 个数&#xff0c;让你选择一个X&#xff0c;使得 ∑i1nXmoda1moda2...modai\sum_{i1}^nX\mod a_1\mod a_2...\mod a_i∑i1n​Xmoda1​moda2​...modai​ 最大 解题思路 可以发现必定存在一个 i &#xff0c;使得当前点贡献为 aia_iai​&a…

老张 .NetCore与Vue 框架学习

缘起作为一个.Net攻城狮已经4年有余了&#xff0c;一直不温不火&#xff0c;正好近来项目不是很忙&#xff0c;闲得无聊&#xff0c;搞一搞新技术&#xff0c;一方面是打发无聊的时间&#xff0c;一方面也是督促自己该学习辣&#xff01;身边的大神都转行的转行&#xff0c;加薪…

【平衡规划】Arithmetic Operations(CF1654E)

正题 CF1654E luogu 正题 给你一个正整数序列&#xff0c;你可以让一个位置变成任意整数&#xff0c;问你最少修改多少个数&#xff0c;能使得其成为等差序列 解题思路 考虑根号分治 对于公差小于 n\sqrt{n}n​ 的&#xff0c;直接枚举公差&#xff0c;然后枚举所有点&…

P1251-餐巾计划问题【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P1251 题目大意 NNN天&#xff0c;第iii天需要aia_iai​个餐巾。 每个餐巾价格为ppp&#xff0c;使用完后有两种清洗方法 清洗mmm天&#xff0c;费用为fff清洗nnn天&#xff0c;费用为sss 求满足所有需求的最小花费 1≤N≤…

J. Spy(多重匹配KM算法)

J. Spy 随机打&#xff0c;最后答案乘n&#xff0c;因为我方等概率的遇见敌人&#xff0c;相当于与n个敌人都打一遍&#xff0c;然后贡献累加作为匹配边权 bfs版本的KM #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>…

2018年10月28日宁波dotnet社区活动回顾及下次活动预告

离上次活动&#xff0c;有半年了&#xff0c;汗。之后尽量保证每月一次&#xff0c;以组织为主&#xff0c;多邀请嘉宾来分享。本次活动不足之处人手不足&#xff1a;由于活动组织事项受限于人手&#xff08;目前就我一个&#xff0c;这次活动前后我又应邀给大红鹰学院应届生介…

[JSOI2007]字符加密

题目描述 喜欢钻研问题的JS 同学&#xff0c;最近又迷上了对加密方法的思考。一天&#xff0c;他突然想出了一种他认为是终极的加密办法&#xff1a;把需要加密的信息排成一圈&#xff0c;显然&#xff0c;它们有很多种不同的读法。 例如‘JSOI07’&#xff0c;可以读作&…

【状压DP】滚榜(P7519)

正题 P7519 题目大意 n个队伍&#xff0c;排名先按分数排序再按编号排序&#xff0c;每个队伍有一个初始分数 aia_iai​&#xff0c;和一个附加分数 bib_ibi​ 对于一个合法的 bib_ibi​ 序列&#xff0c;按 bib_ibi​ 大小排序&#xff0c;从小到大把每个 bib_ibi​ 加进对…

P4480-[BJWC2018]餐巾计划问题【三分,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P4480 题目大意 nnn天&#xff0c;第iii天需要aia_iai​个餐巾。 每个餐巾价格为ppp&#xff0c;使用完后有两种清洗方法 清洗m1m_1m1​天&#xff0c;费用为c1c_1c1​清洗m2m_2m2​天&#xff0c;费用为c2c_2c2​ 求满足所…

BotSharp v0.2 发布, 支持微信智能回复

BotSharp v0.2 主要是针对微信的消息平台做整合&#xff0c;让.NET开发者可以轻松的搭建基于NLU自然语言理解的智能回复功能&#xff0c;BotSharp.Channel.Weixin模块负责和微信的公众号平台对接&#xff0c;接收消息通知&#xff0c;并能消息产生智能回复&#xff0c;回复的内…

P2852 [USACO06DEC]Milk Patterns G

题目描述 Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he can’t predict the quality of milk from one day to the next, there are some regular patterns in th…

codeforces1467 E. Distinctive Roots in a Tree(树上差分)

E. Distinctive Roots in a Tree 树上差分 如果当前节点u的某一棵子树中的某个节点的值和当前节点相同&#xff0c;那么除了当前节点这一棵子树节点&#xff0c;其他节点&#xff08;其他子树以及u上面的节点&#xff09;一定不满足要求。 如果当前节点子树之外的节点&#x…