/**
分析:训练指南图论例题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. hellowolrd 的系统调用
  2. spring,Whitelabel Error Page,This application has no explicit mapping for /error, so you are seeing
  3. 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
  4. Linux 安装loadrunner 碰到的问题
  5. 光学模拟 Android,基于Android平台的光学字符识别应用的设计与实现
  6. 一个简单易用的导出Excel类
  7. 西电计算机达标测试挂科保研,西电竞赛保研
  8. 如何在 Laravel 中使用锁
  9. 一年月份大小月口诀_家乡山溪长的菖蒲种植有讲究,记住“口诀”事半功倍
  10. 程序员面试金典——18.12最大和子矩阵
  11. 下拉树取值与赋值单元格填报(取值赋值)
  12. 研究了1天的ckfinder记录
  13. win10系统遇到深色背景自动降低亮度解决方法、WIN10自动调节亮度、如何关闭WIN10自动调节亮度
  14. 有关在 Windows 上使用 Python 的常见问题解答
  15. 嵌入式linux系统应用开发
  16. Android仿微信朋友圈5实现朋友圈列表
  17. phpStudy激活码
  18. Ubuntu 7.04 feisty 安装设置笔记
  19. 产品读书《麦肯锡工作法:个人竞争力提升50%的7堂课》
  20. 溪云初起日沉阁 山雨欲来风满楼

热门文章

  1. 如何在word中制作线宽不同的三线表
  2. 网页整体布局基本模板
  3. 天干、地支纪年 月 日
  4. 图像修复序列——BSCB模型
  5. 解决pycharm导入自己写的模块飘红问题
  6. 联想小新潮7000-13安装黑苹果笔记,无需无线网卡(无需U盘+win双系统+opencore)
  7. (12)WLAN体系结构及各层的主要功能
  8. 卡塔尔世界杯除了没有中国队以外,都是中国元素!
  9. 程序员缓解职业病的秘方
  10. notepad++无法安装插件问题