2-Sat+输出可行解(个人模版)
2-Sat+输出可行解:
//LightOJ 1251
#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
int output[];
int vis[];
int low[];
int dfn[];
int print[];
int stack[];
int color[];
int pos[];
int degree[];
vector<int >mp[];
vector<int >mp2[];
int n,m,sig,cnt,tot,cont;
void add(int x,int y)
{
mp[x].push_back(y);
}
void top()
{
memset(print,,sizeof(print));
queue<int >s;
for(int i=;i<=sig;i++)
{
if(degree[i]==)
{
s.push(i);
}
}
while(!s.empty())
{
int u=s.front();
if(print[u]==)
{
print[u]=;print[pos[u]]=;
}
s.pop();
for(int i=;i<mp2[u].size();i++)
{
int v=mp2[u][i];
degree[v]--;
if(degree[v]==)s.push(v);
}
}
cont=;
for(int i=;i<=n;i++)if(print[color[i]]==)output[cont++]=i;
}
void Tarjan(int u)
{
vis[u]=;
dfn[u]=low[u]=cnt++;
stack[++tot]=u;
for(int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if(vis[v]==)Tarjan(v);
if(vis[v]==)low[u]=min(low[u],low[v]);
}
if(low[u]==dfn[u])
{
sig++;
do
{
vis[stack[tot]]=-;
color[stack[tot]]=sig;
}
while(stack[tot--]!=u);
}
}
int Slove()
{
sig=;
cnt=;
tot=-;
memset(degree,,sizeof(degree));
memset(stack,,sizeof(stack));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
memset(color,,sizeof(color));
for(int i=;i<=n*;i++)
{
if(vis[i]==)
{
Tarjan(i);
}
}
for(int i=;i<=n;i++)
{
if(color[i]==color[i+n])return ;
pos[color[i]]=color[i+n];
pos[color[i+n]]=color[i];
}
for(int i=;i<=n*;i++)
{
for(int j=;j<mp[i].size();j++)
{
int v=mp[i][j];
if(color[i]!=color[v])
{
degree[color[i]]++;
mp2[color[v]].push_back(color[i]);
}
}
}
top();
return ;
}
int main()
{
int t;
int kase=;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
for(int i=;i<=;i++)mp[i].clear(),mp2[i].clear();
for(int i=;i<m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
int xx=x;int yy=y;
if(x<)x=-x;
if(y<)y=-y;
if(xx>&&yy>)add(x+n,y),add(y+n,x);
if(xx>&&yy<)add(x+n,y+n),add(y,x);
if(xx<&&yy>)add(x,y),add(y+n,x+n);
if(xx<&&yy<)add(x,y+n),add(y,x+n);
}
int ans=Slove();
printf("Case %d: ",++kase);
if(ans==)
{
printf("Yes\n");
printf("%d",cont);
for(int i=;i<cont;i++)
{
printf(" %d",output[i]);
}
printf("\n");
}
else printf("No\n");
}
}
2-Sat+输出可行解(个人模版)的更多相关文章
- poj 2367 Genealogical tree【拓扑排序输出可行解】
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3674 Accepted: 2445 ...
- POJ 3683 Priest John's Busiest Day (2-SAT+输出可行解)
题目地址:POJ 3683 第一次做须要输出可行解的题目. . .大体思路是先用强连通来推断是否有可行解,然后用逆序建图.用拓扑排序来进行染色.然后输出可行解. 详细思路见传送门 由于推断的时候少写了 ...
- Light oj 1251 - Forming the Council 【2-sat】【推断是否存在可行解 + 反向拓扑输出可行解】
1251 - Forming the Council problem=1251" style="color:rgb(79,107,114)"> PDF (Engli ...
- 2-sat按照最小字典序输出可行解(hdu1814)
Peaceful Commission Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- poj3683 2 -sat输出路径
tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =) 主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了 #include<map> #incl ...
- 2-sat 输出任意一组可行解&拓扑排序+缩点 poj3683
Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8170 Accept ...
- poj 3683(2-sat+输出一组可行解)
题目链接:http://poj.org/problem?id=3683 思路:对于每个结婚仪式,只有在开始或结束时进行这两种选择,我们可以定义xi为真当且仅当在开始时进行.于是我们可以通过时间先后确定 ...
- POJ 2337 输出欧拉路径
太无语了. 这道题做了一整天. 主要还是我太弱了. 以后这个就当输出欧拉路径的模版吧. 题目中的输出字典序最小我有点搞不清楚,看了别人是这么写的.但是我发现我过不了后面DISCUSS里面的数据. 题意 ...
- Kettle 事务、转换内顺序、excel模版、使用踩坑
kettle中转换和作业的执行顺序: 1.一个作业内的转换,是顺序执行的. 2.一个转换内的步骤是并行执行的. 3.作业内不支持事务,转换内支持事务. 根据业务需要,通常需要在 ...
随机推荐
- 随笔:JavaScript函数中的对象----arguments
关于arguments 调用函数时,如果需要传参,其实参数就是一个数组,在函数体的内置对象arguments可以访问这个数组,如: arguments[0]:第一个参数 arguments[1]:第二 ...
- 【python】字符串格式化
- JaveScript用二分法与普通遍历(冒泡)
二分法 查找 概念: 从有序的数列中,折半查找. 思路: --> 找到数组中最中间的元素,将其作为基准 --> 从0开始判断数组中的元素,与基准进行比较 --> 比基准小的元素,存入 ...
- MySQL数据库常见操作
数据库连接与关闭:mysql -h 服务器主机地址 -u 用户名 -p 用户密码 创建新用户并授权:grant 权限 on 数据库.数据表 to 用户名@登录主机 identified by &quo ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- Spring入门篇总结:
本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看 视频传送门:Spring入门篇 该门课程主要从Spring的Bean ...
- ArcGIS API for JavaScript 中的数据类型【vs】GPServer的数据类型
熟悉GPServer的同学肯定知道,GPServer在10.1的ArcMap后需要执行成功一次才能发布. 发布GPServer,可以是ArcMap的工具箱的工具,也可以是自己写的模型. 不管是ArcM ...
- Docker(七):Docker容器卷管理
1.使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失.为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器 ...
- Xampp配置本地域名及常见错误解决
本地域名配置 1.计算机-->C盘-->Windows-->System32-->drivers-->etc-->hosts 127.0.0.1 loc ...
- Webpack 2 视频教程 015 - Webpack 2 中的文件压缩
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...