LA 3713
The Bandulu Space Agency (BSA) has plans for the following three space missions:
- Mission A: Landing on Ganymede, the largest moon of Jupiter.
- Mission B: Landing on Callisto, the second largest moon of Jupiter.
- Mission C: Landing on Titan, the largest moon of Saturn.
Your task is to assign a crew for each mission. BSA has trained a number of excellent astronauts; everyone of them can be assigned to any mission. However, if two astronauts hate each other, then it is not wise to put them on the same mission. Furthermore, Mission A is clearly more prestigious than Mission B; who would like to go to the second largest moon if there is also a mission to the largest one? Therefore, the assignments have to be done in such a way that only young, inexperienced astronauts go to Mission B, and only senior astronauts are assigned to Mission A. An astronaut is considered young if their age is less than the average age of the astronauts and an astronaut is senior if their age is at least the averageage. Every astronaut can be assigned to Mission C, regardless of their age (but you must not assign two astronauts to the same mission if they hate each other).
Input
The input contains several blocks of test cases. Each case begins with a line containing two integers 1n
100000 <tex2html_verbatim_mark>and 1
m
100000 <tex2html_verbatim_mark>. The number n <tex2html_verbatim_mark>is the number of astronauts. The next n <tex2html_verbatim_mark>lines specify the age of the n<tex2html_verbatim_mark>astronauts; each line contains a single integer number between 0 and 200. The next m <tex2html_verbatim_mark>lines contains two integers each, separated by a space. A line containing i <tex2html_verbatim_mark>and j <tex2html_verbatim_mark>(1
i, j
n) <tex2html_verbatim_mark>means that the i <tex2html_verbatim_mark>-th astronaut and the j <tex2html_verbatim_mark>-th astronaut hate each other.
The input is terminated by a block with n = m = 0 <tex2html_verbatim_mark>.
Output
For each test case, you have to output n lines, each containing a single letter. This letter is either `A', `B', or `C'. The i <tex2html_verbatim_mark>-th line describes which mission the i <tex2html_verbatim_mark>-th astronaut is assigned to. Astronauts that hate each other should not be assigned to the same mission, only young astronauts should be assigned to Mission B and only senior astronauts should be assigned to Mission A. If there is no such assignment, then output the single line `No solution.' (without quotes).
Sample Input
- 16 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 1 2
- 3 4
- 5 6
- 7 8
- 9 10
- 11 12
- 13 14
- 15 16
- 1 10
- 2 9
- 3 12
- 4 11
- 5 14
- 6 13
- 7 16
- 8 15
- 1 12
- 1 13
- 3 16
- 6 15
- 0 0
Sample Output
- B
- C
- C
- B
- C
- B
- C
- B
- A
- C
- C
- A
- C
- A
- C
- A
- 拆成两个分组走2-sat.
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <stack>
- #include <vector>
- using namespace std;
- const int MAX_N = 1e5 + ;
- int N,M;
- int low[MAX_N * ],pre[MAX_N * ],cmp[MAX_N * ];
- int age[MAX_N];
- vector <int> G[ * MAX_N];
- stack <int> S;
- int dfs_clock,scc_cnt;
- void dfs(int u) {
- pre[u] = low[u] = ++dfs_clock;
- S.push(u);
- for(int i = ; i < G[u].size(); ++i) {
- int v = G[u][i];
- if(!pre[v]) {
- dfs(v);
- low[u] = min(low[u],low[v]);
- } else if(!cmp[v]) {
- low[u] = min(low[u],pre[v]);
- }
- }
- if(pre[u] == low[u]) {
- ++scc_cnt;
- for(;;) {
- int x = S.top(); S.pop();
- cmp[x] = scc_cnt;
- if(x == u) break;
- }
- }
- }
- bool scc() {
- dfs_clock = scc_cnt = ;
- memset(cmp,,sizeof(cmp));
- memset(pre,,sizeof(pre));
- for(int i = ; i <= * N; ++i) {
- if(!pre[i]) dfs(i);
- }
- for(int i = ; i <= N; ++i) {
- if(cmp[i] == cmp[N + i]) return false;
- }
- return true;
- }
- int main()
- {
- freopen("sw.in","r",stdin);
- while(~scanf("%d%d",&N,&M) && (N || M)) {
- int sum = ;
- for(int i = ; i <= N; ++i) {
- scanf("%d",&age[i]);
- sum += age[i];
- }
- for(int i = ; i <= * N; ++i) G[i].clear();
- for(int i = ; i <= M; ++i) {
- int u,v;
- scanf("%d%d",&u,&v);
- if(age[u] * N >= sum && age[v] * N < sum
- || age[u] * N < sum && age[v] * N >= sum) {
- G[v + N].push_back(u);
- G[u + N].push_back(v);
- } else {
- G[u].push_back(v + N);
- G[v].push_back(u + N);
- G[v + N].push_back(u);
- G[u + N].push_back(v);
- }
- }
- if(!scc()) {
- printf("No solution.\n");
- } else {
- for(int i = ; i <= N; ++i) {
- if(age[i] * N >= sum) {
- printf("%c\n",cmp[i] < cmp[i + N] ? 'A' : 'C');
- } else {
- printf("%c\n",cmp[i] < cmp[i + N] ? 'B' : 'C');
- }
- }
- }
- }
- return ;
- }
LA 3713的更多相关文章
- LA 3713 宇航员分组
题目链接:http://vjudge.net/contest/142615#problem/B 题意:有A,B,C三个人物要分配个N个宇航员,每个宇航员恰好要分配一个任务,设平均年龄为X,只有年龄大于 ...
- LA 3713 Astronauts
给个题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=sh ...
- 图论$\cdot$2-SAT问题
2-SAT问题是这样的:有$n$个布尔变量$x_i$,另有$m$个需要满足的条件,每个条件的形式都是“$x_i$为真/假或者$x_j$为真/假”.比如:"$x_1$为真或者$x_3$为假“. ...
- 2-SAT 问题与解法小结
2-SAT 问题与解法小结 这个算法十分的奇妙qwq... 将一类判定问题转换为图论问题,然后就很容易解决了. 本文有一些地方摘录了一下赵爽<2-SAT解法浅析> (侵删) 一些概念: \ ...
- [UOJ317]【NOI2017】游戏 题解
题意 小 L 计划进行 \(n\) 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 A.B.C 表示.地图一共有四种,分别用小写字 ...
- leggere la nostra recensione del primo e del secondo
La terra di mezzo in trail running sembra essere distorto leggermente massima di recente, e gli aggi ...
- Le lié à la légèreté semblait être et donc plus simple
Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...
- Mac Pro 使用 ll、la、l等ls的别名命令
在 Linux 下习惯使用 ll.la.l 等ls别名的童鞋到 mac os 可就郁闷了~~ 其实只要在用户目录下建立一个脚本“.bash_profile”, vim .bash_profile 并输 ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
随机推荐
- flask程序部署在openshift上的一些注意事项
https://www.openshift.com/blogs/how-to-install-and-configure-a-python-flask-dev-environment-deploy-t ...
- JavaScript 组件化开发之路(一)
*:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ...
- C/C++ 关于大小端模式
大端模式: 数据的高字节存在低地址 数据的低字节存在高地址 小端模式: 数据的高字节存在高地址 数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...
- 误删system04.dbf 报:ORA-01157 ORA-01110
DB:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production OS:Oracle Linux 5.7 ...
- JavaScript高级程序设计之元素大小
1.偏移量 // 元素相对于文档的偏移量 var getOffSet = function (ele) { var actualLeft = ele.offsetLeft, // 相对于offsetP ...
- ios8/sdk8/xcode6/iphone6(+)适配
AppIcon https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Ic ...
- Android实现AppWidget、Broadcast静态注册
Android实现AppWidget.Broadcast静态注册 本篇博客是基于我上一篇博客继续修改的,详情请看Android实现AppWidget.Broadcast动态注册 开发工具:Andori ...
- 在EDK里面添加ISE IP core的方法
(1)在ISE下,使用core generator,可以得到xilinx的IP的*.v和*.ngc 文件,将这两个文件拷贝出来: (2)在EDK下使用“Create or Import Periphe ...
- Careercup - Google面试题 - 4699414551592960
2014-05-06 13:34 题目链接 原题: we have a random list of people. each person knows his own height and the ...
- openfire插件开发之完美开发
http://redhacker.iteye.com/blog/1919329 一.说在前面 在继上篇Openfire3.8.2在eclipse中Debug方式启动最简单的方式后,我研究了openfi ...