poj3683
来源:互联网 发布:java流程管理系统 编辑:程序博客网 时间:2024/06/13 22:42
题意:有n对新人要举行仪式,每对都有两个时间段可以选择,问是否可以所有新人的仪式时间不重叠
然后还要输出方式
今天听智杰dalao说今年noi考了2-sat
然而我听都没听过TAT。。
于是今天下午就去颓了一下下 是真的在颓
要学的人可以看看这篇吧,挺好的。。
http://blog.csdn.net/jarjingx/article/details/8521690
其实我看的不是很认真因为我在颓,但边看边自己想了一下,感觉还好。。
本来是想去做那个入门题,poi0106那个,但是poi?我没去过啊。。去看了一下就逃了回来这题了
2-sat模板题吧。。
贴个模板
感觉基本功能都在了。。
弄了半天,结果发现是强连通打错了。。
#include<cstdio>#include<queue>#include<algorithm>#include<iostream>#include<cstring>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<y?x:y;}void dfs (int x){ low[x]=dfn[x]=++id; sta[++top]=x; v[x]=true; for (int u=last[x];u!=-1;u=s[u].last) { int y=s[u].y; if (dfn[y]==-1) { dfs(y); low[x]=mymin(low[x],low[y]); } else if (v[y]) low[x]=mymin(low[x],low[y]); } if (low[x]==dfn[x]) { lalal++; int i; do{ i=sta[top--]; v[i]=false; belong[i]=lalal; }while(i!=x); }}qq s1[M];int num2,last2[N];int du[N];void init2 (int x,int y){ du[y]++; num2++; s1[num2].x=x;s1[num2].y=y; s1[num2].last=last2[x]; last2[x]=num2;}void rebt(){ num2=0;memset(last2,-1,sizeof(last2)); for (int u=1;u<=2*n;u++) for (int i=last[u];i!=-1;i=s[i].last) { int y=s[i].y; if (belong[u]!=belong[y]) init2(belong[y],belong[u]); }}void print(int x){ printf("%.2d:",x/60); printf("%.2d ",x%60);}int op[N];int col[N];void dfs1 (int x){ if (col[x]) return ; col[x]=2; for (int u=last2[x];u!=-1;u=s1[u].last) dfs1(s1[u].y);}void topsort(){ queue<int> 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;}
阅读全文
0 0
- poj3683
- poj3683
- poj3683 pascal题解
- poj3683 2-SAT 求解
- 【POJ3683】Priest John's Busiest Day
- POJ3683 Priest John's Busiest Day
- POJ3683——Priest John's Busiest Day
- POJ3683:Priest John's Busiest Day 2-SAT
- 2SAT poj3683 Priest John's Busiest Day
- POJ3683-Priest John's Busiest Day(2-SAT)
- 【POJ3683】Priest John's Busiest Day(Special Judge)
- POJ3683 Priest John's Busiest Day【2-SAT】
- 2-SAT——5.0(poj3683 Priest John's Busiest Day)
- 2-sat 输出任意一组可行解&拓扑排序+缩点 poj3683
- 2-SAT模板(scc强连通模板)-poj3683-Priest John's Busiest Day
- poj3683 Priest John's Busiest Day【2-sat n+m算法】
- 【2-SAT任意解】POJ3683[Priest John's Busiest Day]题解
- 【POJ3683】Priest John's Busiest Day (2-sat输出任意解)
- java读取json文件
- 函数式编程简介(抄录)与在非函数式项目中的“伪应用”
- ios六大手势的创建使用
- Spring总结以及在面试中的一些问题.
- vue-cli代码缩进报错
- poj3683
- 第一次写博客,就来个创建springboot项目吧
- PAT 乙级 1067.试密码(20)
- java基础之HTML
- Caffe 中 的工具以及trick
- Hibernate查询部分字段并封装到指定类中(HQL)
- 简易爬虫抓取网页内容并写入文本
- androidstudio 优化编译速度(测试有效)
- 是时候思考一下到底要不要干程序员了