2-Sat+输出可行解(个人模版)

简介: 2-Sat+输出可行解: 1 //LightOJ 1251 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int output[40005]; 8 int ...

2-Sat+输出可行解:

  1 //LightOJ 1251
  2 #include<stdio.h>
  3 #include<string.h>
  4 #include<vector>
  5 #include<queue>
  6 using namespace std;
  7 int output[40005];
  8 int vis[70005];
  9 int low[70005];
 10 int dfn[70005];
 11 int print[70005];
 12 int stack[70005];
 13 int color[70005];
 14 int pos[70005];
 15 int degree[70005];
 16 vector<int >mp[70005];
 17 vector<int >mp2[70005];
 18 int n,m,sig,cnt,tot,cont;
 19 void add(int x,int y)
 20 {
 21     mp[x].push_back(y);
 22 }
 23 void top()
 24 {
 25     memset(print,0,sizeof(print));
 26     queue<int >s;
 27     for(int i=1;i<=sig;i++)
 28     {
 29         if(degree[i]==0)
 30         {
 31             s.push(i);
 32         }
 33     }
 34     while(!s.empty())
 35     {
 36         int u=s.front();
 37         if(print[u]==0)
 38         {
 39             print[u]=1;print[pos[u]]=2;
 40         }
 41         s.pop();
 42         for(int i=0;i<mp2[u].size();i++)
 43         {
 44             int v=mp2[u][i];
 45             degree[v]--;
 46             if(degree[v]==0)s.push(v);
 47         }
 48     }
 49     cont=0;
 50     for(int i=1;i<=n;i++)if(print[color[i]]==1)output[cont++]=i;
 51 }
 52 void Tarjan(int u)
 53 {
 54     vis[u]=1;
 55     dfn[u]=low[u]=cnt++;
 56     stack[++tot]=u;
 57     for(int i=0;i<mp[u].size();i++)
 58     {
 59         int v=mp[u][i];
 60         if(vis[v]==0)Tarjan(v);
 61         if(vis[v]==1)low[u]=min(low[u],low[v]);
 62     }
 63     if(low[u]==dfn[u])
 64     {
 65         sig++;
 66         do
 67         {
 68             vis[stack[tot]]=-1;
 69             color[stack[tot]]=sig;
 70         }
 71         while(stack[tot--]!=u);
 72     }
 73 }
 74 int Slove()
 75 {
 76     sig=0;
 77     cnt=1;
 78     tot=-1;
 79     memset(degree,0,sizeof(degree));
 80     memset(stack,0,sizeof(stack));
 81     memset(dfn,0,sizeof(dfn));
 82     memset(low,0,sizeof(low));
 83     memset(vis,0,sizeof(vis));
 84     memset(color,0,sizeof(color));
 85     for(int i=1;i<=n*2;i++)
 86     {
 87         if(vis[i]==0)
 88         {
 89             Tarjan(i);
 90         }
 91     }
 92     for(int i=1;i<=n;i++)
 93     {
 94         if(color[i]==color[i+n])return 0;
 95         pos[color[i]]=color[i+n];
 96         pos[color[i+n]]=color[i];
 97     }
 98     for(int i=1;i<=n*2;i++)
 99     {
100         for(int j=0;j<mp[i].size();j++)
101         {
102             int v=mp[i][j];
103             if(color[i]!=color[v])
104             {
105                 degree[color[i]]++;
106                 mp2[color[v]].push_back(color[i]);
107             }
108         }
109     }
110     top();
111     return 1;
112 }
113 int main()
114 {
115     int t;
116     int kase=0;
117     scanf("%d",&t);
118     while(t--)
119     {
120         scanf("%d%d",&m,&n);
121         for(int i=1;i<=60000;i++)mp[i].clear(),mp2[i].clear();
122         for(int i=0;i<m;i++)
123         {
124             int x,y;
125             scanf("%d%d",&x,&y);
126             int xx=x;int yy=y;
127             if(x<0)x=-x;
128             if(y<0)y=-y;
129             if(xx>0&&yy>0)add(x+n,y),add(y+n,x);
130             if(xx>0&&yy<0)add(x+n,y+n),add(y,x);
131             if(xx<0&&yy>0)add(x,y),add(y+n,x+n);
132             if(xx<0&&yy<0)add(x,y+n),add(y,x+n);
133         }
134         int ans=Slove();
135         printf("Case %d: ",++kase);
136         if(ans==1)
137         {
138             printf("Yes\n");
139             printf("%d",cont);
140             for(int i=0;i<cont;i++)
141             {
142                 printf(" %d",output[i]);
143             }
144             printf("\n");
145         }
146         else printf("No\n");
147     }
148 }

 

目录
相关文章
kde
|
3天前
|
JSON Linux 数据格式
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
1807 5
|
12天前
|
Java Linux Maven
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
|
6天前
|
人工智能 定位技术 API
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
506 4
|
3天前
|
JavaScript Ubuntu IDE
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
326 0
|
8天前
|
数据采集 JSON API
Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
本文介绍如何利用智能体与Python代码批量处理Excel中的脏数据,解决人工录入导致的格式混乱、逻辑错误等问题。通过构建具备数据校验、异常标记及自动修正功能的系统,将数小时的人工核查任务缩短至分钟级,大幅提升数据一致性和办公效率。
|
1天前
|
人工智能 Java Spring
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
180 4
【保姆级图文详解】大模型、Spring AI编程调用大模型
|
5天前
|
人工智能 大数据 开发者
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
阿里云推出基于场景的解决方案免费试用活动,新老用户均可领取100点试用点,完成部署还可再领最高100点,相当于一年可获得最高200元云资源。覆盖AI、大数据、互联网应用开发等多个领域,支持热门场景如DeepSeek部署、模型微调等,助力企业和开发者快速验证方案并上云。
231 16
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
|
6天前
|
存储 人工智能 自然语言处理
DeepSeek R1+Open WebUI实现本地知识库的搭建和局域网访问
本文介绍了使用 DeepSeek R1 和 Open WebUI 搭建本地知识库的详细步骤与注意事项,涵盖核心组件介绍、硬件与软件准备、模型部署、知识库构建及问答功能实现等内容,适用于本地文档存储、向量化与检索增强生成(RAG)场景的应用开发。
287 0
|
1天前
|
数据采集 存储 数据可视化
数据分析都要会BI?No!不是所有企业都应该上BI
BI工具已成为数据分析行业的标配,广泛应用于企业决策支持。本文深入解析了BI的重要性、演进历程,并探讨企业是否真正具备实施BI的条件,帮助读者理性评估需求,避免盲目跟风。