/**
分析:训练指南图论例题10,p327
2-sat
**/#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=100005;struct TwoSAT
{int n;vector<int> G[maxn*2];bool mark[maxn*2];int S[maxn*2],c;bool dfs(int x){if(mark[x^1]) return false;if(mark[x]) return true;mark[x]=true;S[c++]=x;for(int i=0;i<G[x].size();i++)if(!dfs(G[x][i])) return false;return true;}void init(int n){this->n=n;for(int i=0;i<n*2;i++) G[i].clear();memset(mark,0,sizeof(mark));}void add_clause(int x,int xval,int y,int yval){x=x*2+xval;y=y*2+yval;G[x^1].push_back(y);G[y^1].push_back(x);}bool solve(){for(int i=0;i<n*2;i+=2){if(!mark[i] && !mark[i+1]){c=0;if(!dfs(i)){while(c>0) mark[S[--c]]=false;if(!dfs(i+1)) return false;}}}return true;}
};TwoSAT solver;
int n, m, total_age, age[maxn];int is_young(int x) {return age[x] * n < total_age;
}int main()
{while(scanf("%d%d",&n,&m)!=EOF){if(n==0) break;total_age=0;for(int i=0;i<n;i++){scanf("%d",&age[i]);total_age+=age[i];}solver.init(n);for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);a--;b--;if(a==b) continue;solver.add_clause(a,1,b,1);if(is_young(a)==is_young(b)){solver.add_clause(a,0,b,0);}}if(!solver.solve()) printf("No solution.\n");else{for(int i=0;i<n;i++){if(solver.mark[i*2]) printf("C\n");else if(is_young(i)) printf("B\n");else printf("A\n");}}}return 0;
}

uvalive 3713 2-sat相关推荐

  1. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  2. uvaLive 3713

    题目链接 #include <cstdio> #include <cstring> #include <vector> using namespace std; # ...

  3. 图论算法与模型(训练指南题库)

    一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...

  4. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  5. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

  6. 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...

    近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...

  7. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...

  8. MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 美国麻省理工学院今天在招生网站上宣布,决定不再考虑将SAT科目考试作为录取过程的一部分. 这一决定从2020~2021学年开始生效. SA ...

  9. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?

    加州大学欧文分校对于SAT成绩的要求是多少?现在申请美国本科,很多都是需要同学们提供sat成绩的额,下面托普仕留学老师为大家介绍SAT多少分才能申请加州大学欧文分校?同学们在申请之前要多注意院校信息. ...

最新文章

  1. 《大数据导论》——1.4节案例学习背景
  2. datePicker在fullscreen下不弹出
  3. RESTful API的理解
  4. linux 内核将两个设备相关联,linux用户空间和内核空间交换数据
  5. 算法训练 最长字符串 java
  6. vb红绿灯自动切换_VB红绿灯程序
  7. python画图哆啦a梦大作业_Python—turtle画图(哆啦A梦)
  8. Java-在线聊天系统-线程
  9. 学习WPF绝佳的去处……WPF教程,WPF入门教程,WPF视频教程
  10. uniapp使用阿里百川SDK唤醒淘宝APP 打开淘宝领券页面/渠道备案,uniapp对接淘宝联盟等等超级详细
  11. 台湾-李宏毅教授的深度学习视频教程
  12. 20多个好用的 Vue 组件库
  13. githut管理vs2012代码
  14. 怎么创建自己的网站?创建自己网站的步骤
  15. vue实例的watch选项
  16. 使用树莓派来做打印服务器
  17. 我是如何一步一步爬上 「64K限制」 的坑
  18. a到z的ascii码值是多少_c语言 ASCLL码中 A~Z和a~z是多少
  19. 了解Nape 2d物理引擎 第一天
  20. 安卓手机续航测试软件,10款手机电池续航测试对决:都是骁龙865手机,续航差距有多大?...

热门文章

  1. 文件随机重命名的方法
  2. DWM桌面窗口管理器
  3. struct(结构体)
  4. 20款华丽的几何形状字体【免费下载】
  5. -moz-zoom-in 和-moz-zoom-out
  6. 人工智能基础之美女和野人过河问题
  7. 坐标转换(像素转换米)
  8. 怎样与常见的9种人打交道
  9. tiup cluster restart
  10. VS_设置护眼背景色