
poj3683
是真的在颓 q; for (int u=1;u<=lalal;u++) if (du[u]==0) q.push(u); while (!q.empty()) { int x=q.front();q.pop(); if (col[x]) continue; col[x]=1;dfs1(op[x]); for (int u=last2[x];u!=-1;u=s1[u].last) { int y=s1[u].y; du[y]--; if (du[y]==0) q.push(y); } }}int main(){ n=read(); for (int u=1;u<=n;u++) { a[2*u]=read()*60+read(); b[2*u-1]=read()*60+read(); int x=read(); b[2*u]=a[2*u]+x;a[2*u-1]=b[2*u-1]-x; } bt(); memset(v,false,sizeof(v)); memset(dfn,-1,sizeof(dfn)); for (int u=1;u<=2*n;u++) { if (dfn[u]==-1)dfs(u); // printf("%d %d\n",u,belong[u]); } for (int u=1;u<=n;u++) if (belong[2*u]==belong[2*u-1]) { printf("NO");return 0; } printf("YES\n"); rebt(); for (int u=1;u<=n;u++) { op[belong[2*u]]=belong[2*u-1]; op[belong[2*u-1]]=belong[2*u]; } topsort(); for(int i=1;i<=n;i++) if(col[belong[2*i]]==1) print(a[2*i]),print(b[2*i]),puts(""); else print(a[2*i-1]),print(b[2*i-1]),puts(""); return 0;}
发布日期:2021-05-06 23:45:57
浏览次数:19
分类:技术文章
本文共 2298 字,大约阅读时间需要 7 分钟。
题意:有n对新人要举行仪式,每对都有两个时间段可以选择,问是否可以所有新人的仪式时间不重叠
然后还要输出方式今天听智杰dalao说今年noi考了2-sat
然而我听都没听过TAT。。 于是今天下午就去颓了一下下要学的人可以看看这篇吧,挺好的。。
其实我看的不是很认真因为我在颓,但边看边自己想了一下,感觉还好。。
本来是想去做那个入门题,poi0106那个,但是poi?我没去过啊。。去看了一下就逃了回来这题了
2-sat模板题吧。。
贴个模板 感觉基本功能都在了。。弄了半天,结果发现是强连通打错了。。
#include#include #include #include #include using namespace std;const int N=2005;const int M=2000005;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){ x=x*10+ch-'0';ch=getchar();} return x*f;}int n;int a[N],b[N];//开始时间 结束时间bool jud(int x,int y){ if(b[x]<=a[y]||a[x]>=b[y])return 0; return 1;}struct qq{ int x,y,last;}s[M];int num,last[N];void init (int x,int y){ num++; s[num].x=x;s[num].y=y; s[num].last=last[x]; last[x]=num; return ;}void bt (){ num=0;memset(last,-1,sizeof(last)); for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++)//这两对新人的冲突关系 冲突就连边 { if(jud(2*i,2*j)) {init(2*i,2*j-1);init(2*j,2*i-1);} if(jud(2*i,2*j-1)) {init(2*i,2*j);init(2*j-1,2*i-1);} if(jud(2*i-1,2*j)) {init(2*i-1,2*j-1);init(2*j,2*i);} if(jud(2*i-1,2*j-1)){init(2*i-1,2*j);init(2*j-1,2*i);} } }}int dfn[N],low[N],id=0;int sta[N],top;bool v[N];int belong[N],lalal=0;int mymin (int x,int y){ return x
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月28日 03时24分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux:多线程简介
2019-03-04
【java】316. 去除重复字母----学会栈的使用
2019-03-04
【java】227. 基本计算器 II---思路简单,代码清晰!!!
2019-03-04
【java】115. 不同的子序列----学会动态规划,时间复杂度O(n^2)!!!
2019-03-04
【java】92. 反转链表 II---无需额外空间,时间复杂度O(n)!!!
2019-03-04
【java】368. 最大整除子集---使用动态规划,快速解决子问题!!!
2019-03-04
莫比乌斯函数
2019-03-04
HDU - 6514 Monitor(二维差分+二维前缀和)
2019-03-04
LINUX延时函数使用
2019-03-04
数据结构第七章(图---总结一)
2019-03-04
2020-12-24
2019-03-04
网页中常见的状态码
2019-03-04
JDBC——(5)使用Statement操作数据表的弊端
2019-03-04
JDBC——(6)PreparedStatement的使用
2019-03-04
JDBC——(6)PreparedStatement的使用——实现查询操作
2019-03-04
JDBC——小知识:PreparedStatement 和Statement的比较
2019-03-04
JDBC——(6)PreparedStatement的使用——图解查询操作流程
2019-03-04
JDBC——(6)PreparedStatement的使用——针对不同表的查询操作
2019-03-04