layout: post
title: 训练指南 UVALive - 3713 (2-SAT)
author: "luowentaoaa"
catalog: true
mathjax: true
tags:
- 2-SAT
- 图论
- 训练指南


Astronauts

UVALive - 3713

题意

有A,B,C三个任务要分配个N个宇航员,每个宇航员恰好要分配一个任务,设平均年龄为X,只有年龄大于或等于X的宇航员才能分配任务A。只有年龄严格小于X的宇航员才能分配任务B。而任务C没有限制。有M对宇航员相互讨厌,因此不能分配到同一任务。编程找出一个满足上述所有要求的任务分配方案。

题解

如果憎恶就代表不能一起去C,如果年龄相同就代表不能一起去A/B;

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const int maxn=1e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
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));}/// x=xval or y= yval;void add_caluse(int x,int xval,int y,int yval){x=x*2+xval;y=y*2+yval;G[x^1].push_back(y);///如果x为真 那么y必须为假;G[y^1].push_back(x);///如果y为真 那么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;}
};
int n,a[maxn],m;
TwoSAT solver;
int tol;
int is_young(int x){return a[x]*n<tol;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);while(cin>>n>>m&&n&&m){tol=0;solver.init(n);for(int i=0;i<n;i++){cin>>a[i];tol+=a[i];}for(int i=0;i<m;i++){int a,b;cin>>a>>b;a--;b--;solver.add_caluse(a,1,b,1);if(is_young(a)==is_young(b))solver.add_caluse(a,0,b,0);}if(!solver.solve())cout<<"No solution."<<endl;else for(int i=0;i<n;i++)if(solver.mark[i*2])cout<<"C"<<endl;else if(is_young(i))cout<<"B"<<endl;else cout<<"A"<<endl;}return 0;
}

转载于:https://www.cnblogs.com/luowentao/p/10343539.html

训练指南 UVALive - 3713 (2-SAT)相关推荐

  1. 训练指南 UVALive - 4043(二分图匹配 + KM算法)

    layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...

  2. 《算法竞赛入门经典训练指南》pdf

    下载地址:网盘下载 基本介绍 编辑 内容简介 <算法竞赛入门经典:训练指南>题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点. ...

  3. GPT-4问世;LLM训练指南;纯浏览器跑Stable Diffusion

    1.多模态GPT-4正式发布:支持图像和文本输入,效果超越ChatGPT OpenAI的里程碑之作GPT-4终于发布,这是一个多模态大模型(接受图像和文本输入,生成文本).主要能力有: GPT-4可以 ...

  4. 训练指南第一部分解题报告

    主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks  (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...

  5. 训练指南第二章-基础问题

    训练指南第二章-基础问题 P170 2 / 4 Problem A UVA 10943 How do you add? 1 / 2 Problem B UVA 10780 Again Prime? N ...

  6. 算法竞赛训练指南代码仓库_数据仓库综合指南

    算法竞赛训练指南代码仓库 重点 (Top highlight) As a data scientist, it's valuable to have some idea of fundamental ...

  7. 训练指南——数学专题一的总结

    差不多一个星期过去了,在这一个多星期里,我做了一个数学专题和两场训练赛,要说对自己的感觉,只能说很差劲,开始的时候以为环境会比现在宽松很多,后来才发现想法是错误的,实验室室里室一种紧张的气氛,感觉就像 ...

  8. 一根绳子从一头烧需30时分钟_小学生一分钟跳绳满分训练指南

    小学生一分钟跳绳测试项目是体育老师和众多家庭的痛,大多数的孩子1分钟跳不到60个.而跳绳又是体质健康测试里占分比较高的一个项目,所以很多宝妈/宝爸们很是焦虑.因此,我们根据平时儿童跳绳训练的经验和网上 ...

  9. 算法竞赛入门经典训练指南

    最近在看算法竞赛入门经典训练指南这本书,书中不错的算法我将在博客中发布,和大家共同学习. 题目: 在你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个 ...

最新文章

  1. Task04:青少年软件编程(Python)等级考试模拟卷(一级)
  2. 查看oracle 的数据文件的版本信息
  3. 渗透测试入门14之渗透测试工具1
  4. PDF 开发者 Charles Geschke 去世,39 年前联合创立软件巨头 Adobe!
  5. mysql query profiler_MySQL Query Profiler
  6. 题目1003:A+B 使用大数相加方法解法
  7. 网课查课插件 支持 60类型+ 彩虹查课插件 网络查课查询
  8. hadoop 学习心得
  9. 如何让语音芯片与功放芯片之间更好的配合,使得产品音效更好
  10. PDF417数据容量
  11. 破解WinRAR广告
  12. qpython3 l_QPython 3(com.hipipal.qpy3) - 3.0.0 - 应用 - 酷安网
  13. win7 旗舰版系统激活方法
  14. vue不同页面切换,背景音乐连续播放不间断
  15. OSChina 周四乱弹 ——今天家里只有我和女室友,我想……
  16. java计算机毕业设计在线辅导答疑系统源码+mysql数据库+系统+lw文档+部署
  17. 迁移学习基础知识(一)——分类及应用
  18. 怎么防止服务器被入侵?
  19. java计算机毕业设计高校体育器材及场地管理(附源码、数据库)
  20. 手机归属地查询示例代码

热门文章

  1. 双指针算法 | 力扣344. 反转字符串
  2. 用Ext-4.2简单实现分页效果
  3. Java-Web Servlet开发
  4. linux 下用ecipse 作用oracle 的客户端
  5. 安装好了java7怎么打开,Windows怎么安装JDK1.7 JDK1.7怎么安装图解
  6. oracle error-1555,从另外一个角度看ORA-1555
  7. python while函数_详解python while 函数及while和for的区别
  8. 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校庆祝2020年教师节暨表彰大会隆重举行...
  9. Python+Appium+POM实现APP端自动化测试
  10. php连接mysql总结_php连接数据库的三种方式的总结