当前位置: 首页 > news >正文

[Non] - 选举

[Non] - 选举

大意

给定 \(N\) 个候选人 \(\{1,2,\dots,N\}\)\(M\) 个形如 \(\pm i \pm j\)\(1 \le i,j \le N\))的民意调查约束,判断是否存在对每个候选人「当选/落选」的状态分配方案,使得该方案满足所有约束条件。若存在则输出 \(1\),否则输出 \(0\)

  • \(+i+j\)\(x_i \lor x_j\)(至少一个当选)
  • \(-i-j\)\(\neg x_i \lor \neg x_j\)(至少一个落选)
  • \(+i-j\)\(x_i \lor \neg x_j\)\(i\) 当选 或 \(j\) 落选)
  • \(-i+j\)\(\neg x_i \lor x_j\)\(i\) 落选 或 \(j\) 当选)

思路

对于这个题目,显然的,\(\text{2 - SAT}\) 直接秒了。

代码

#include<iostream>
#include<vector>
using namespace std;const int MAXN = 1005;
int n, m;
vector<int> g[MAXN * 2];
bool vis[MAXN * 2];
int S[MAXN * 2], c = 0;bool dfs(int u){if(vis[u ^ 1]){return false;}if(vis[u]) return true;vis[u] = true;S[c ++] = u;for(int i = 0;i < g[u].size();i ++){int v = g[u][i];if(!dfs(v)){return false;}}return true;
}bool judge(){for(int i = 0;i < 2 * n;i += 2){if(!vis[i] && !vis[i + 1]){c = 0;if(!dfs(i)){while(c > 0) vis[S[-- c]] = false;if(!dfs(i + 1)){return false;}}}}return true;
}int main(){ios::sync_with_stdio(0);cin.tie(0);while(cin >> n >> m){for(int i = 0;i <= 2 * n - 1;i ++){if(!g[i].empty()) g[i].clear();vis[i] = false;}for(int i = 1;i <= m;i ++){string s1, s2;cin >> s1 >> s2;int u = stoi(s1.substr(1)); u --;int v = stoi(s2.substr(1)); v --;if(s1[0] == '+' && s2[0] == '+'){g[u * 2 + 1].push_back(v * 2);g[v * 2 + 1].push_back(u * 2);}else if(s1[0] == '-' && s2[0] == '-'){g[u * 2].push_back(v * 2 + 1);g[v * 2].push_back(u * 2 + 1);}else if(s1[0] == '+' && s2[0] == '-'){g[u * 2 + 1].push_back(v * 2 + 1);g[v * 2].push_back(u * 2);}else{g[u * 2].push_back(v * 2);g[v * 2 + 1].push_back(u * 2 + 1);}}if(judge()){cout << 1 << '\n';}else{cout << 0 << '\n';}}return 0;
}
http://www.jsqmd.com/news/111466/

相关文章:

  • 浅析Cursor Rules了解(工作原理、四种规则类型对比、文件结构、分层设计)及如何在项目中使用的最佳实践
  • 辛普森法则
  • GitCode克隆输入账号密码后报错
  • 《嘟嘟脸恶作剧》:说是捏脸,你还真捏脸啊?
  • [生存技能] 速冻包子热处理工艺优化研究:基于家庭厨房环境的操作规程
  • 英语_阅读_if Your computer broke down_待读
  • 《C语言电子书-2026最新版》-C语言数据类型概述
  • RadeGS——PCC损失
  • FFmpeg 关键的结构体
  • 优化:三数之和,最接近的三数之和
  • 自动化机器学习AutoML:TPOT工具从零到实战完整使用教程
  • 实用指南:GitHub 热榜项目 - 日榜(2025-11-20)
  • JAVA国际版同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5 - 实践
  • 第六十二篇
  • RadeGS——添加法向量损失
  • 12月18日总结 - 作业----
  • XSS(跨站脚本攻击)
  • 自考ScrumMaster-PSM:经验分享~
  • Python - dataclass
  • P1330 封锁阳光大学
  • 9 个降AI率工具,研究生必看!
  • [POI 2021/2022 R1] Domino 题解
  • 07_软考_程序设计语言
  • 17.行为型 - 观察者模式 (Observer Pattern)
  • 云原生热点聚焦:OpenTofu 1.11.0 发布与关键工具更新
  • GitCode项目创建分支并提交代码
  • Bitcraze介绍
  • 修改 OBS-Studio 的字体
  • Linux上位机Windows上位机C++(QT)开发三菱上位机MC 1E 二进制通信 源码 C++快速实现三菱 MC 1E 二进制 支持三菱FX和A系列PLC A-1E 帧 国产化系统上位机
  • SIGSEGV段错误排查全攻略