题意

有三种药丸,白色W>红色R>蓝色B,给你m个约束条件,问你n个药丸的颜色,不能确定颜色输出‘?’

题解

如果1<2<3,只要找到2就能确定1和3的颜色

如果2=4,只要确定一个就能确定另一个

处理的时候先把=用并查集处理一下

在处理<和>号

代码

 #include<bits/stdc++.h>
using namespace std; const int maxn=;
const int maxm=maxn*maxn/;
int f[maxn];
int u[maxm],v[maxm],op[maxm];
vector<int>big[maxn],small[maxn];
char s[];
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++)
{
scanf("%s",s);
int l=strlen(s),sum=;
for(int j=;j<=l;j++)
{
if(j==l)
{
v[i]=sum;
continue;
}
if(s[j]>=''&&s[j]<='')
sum=sum*+s[j]-'';
else
{
if(s[j]=='>')op[i]=;
if(s[j]=='<')op[i]=;
if(s[j]=='=')op[i]=;
u[i]=sum,sum=;
}
}
if(op[i]==)f[find(u[i])]=find(v[i]);
}
for(int i=;i<=m;i++)
if(op[i]==)
{
int fu=find(u[i]),fv=find(v[i]);
small[fu].push_back(fv);
big[fv].push_back(fu);
}
else if(op[i]==)
{
int fu=find(u[i]),fv=find(v[i]);
small[fv].push_back(fu);
big[fu].push_back(fv);
}
char ans[maxn];
memset(ans,'?',sizeof ans);
for(int i=;i<=n;i++)
{
if(small[i].size()>&&big[i].size()>)
{
ans[i]='R';
for(int j=;j<small[i].size();j++)
ans[small[i][j]]='B';
for(int j=;j<big[i].size();j++)
ans[big[i][j]]='W';
}
}
for(int i=;i<=n;i++)
if(f[i]==i)
{
for(int j=;j<=n;j++)
{
if(ans[j]=='?'&&find(j)==f[i])
ans[j]=ans[i];
}
}
for(int i=;i<=n;i++)
printf("%c",ans[i]);
printf("\n");
return ;
}

Gym - 101243F Vitamins(思维+并查集)的更多相关文章

  1. 【枚举】【并查集】Gym - 101243F - Vitamins

    题意:有n片药,有三种颜色,白色比红色重,红色比蓝色重,给你一些它们之间的重量关系,比如1>3,2=4之类,问你它们的颜色,如果没法判断的输出?. 先并查集把等于号全缩起来,然后按照大于号建图, ...

  2. Gym 100814C Connecting Graph 并查集+LCA

    Description standard input/output Statements Alex is known to be very clever, but Walter does not be ...

  3. 思维+并查集 hdu5652

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意: 输入T,接下来T个样例,每个样例输入n,m代表图的大小,接下来n行,每行m个数,代表图, ...

  4. cf 之lis+贪心+思维+并查集

    https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...

  5. 牛客网多校第4场 J Hash Function 【思维+并查集建边】

    题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...

  6. codeforces 1013B 【思维+并查集建边】

    题目链接:戳这里 转自:参考博客 题意:给一个n*m的矩阵,放入q个点,这q个点之间的关系是,若已知这样三个点(x1,y1),(x2,y1),(x1,y2),可以在(x2,y2)处生成一个新的点,对于 ...

  7. CodeForces - 1243D (思维+并查集)

    题意 https://vjudge.net/problem/CodeForces-1243D 有一张完全图,n个节点 有m条边的边权为1,其余的都为0 这m条边会给你 问你这张图的最小生成树的权值 思 ...

  8. Codeforces Gym 100463E Spies 并查集

    Spies Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Desc ...

  9. hdu6074[并查集+LCA+思维] 2017多校4

    看了标答感觉思路清晰了许多,用并查集来维护全联通块的点数和边权和. 用另一个up[]数组(也是并查集)来保证每条边不会被重复附权值,这样我们只要将询问按权值从小到大排序,一定能的到最小的边权和与联通块 ...

随机推荐

  1. web安全/渗透测试--1--web安全原则

    web 安全:  https://blog.csdn.net/wutianxu123/article/category/8037453/2 web安全原则 安全应该是系统开发之初就考虑的问题.换句话说 ...

  2. keal

    I remember the wonderful moment you appeared before me, like a fleeting vision, like a genius of pur ...

  3. Haskell语言开发工具

    Stack How to Script with Stack Originate Guides - Haskell Tool Stack 配置 Intellij Idea IntelliJ plugi ...

  4. python 学习笔记之@property

    今天学习python类看到 @property 的用法觉得很新奇,就自己尝试了很久,刚开始不明白,后来终于明白了点 其实总结一句话就是, @property 把类中的方法调用方式改变成当成属性属性调用 ...

  5. MIME sniffing攻击

    基于IE的MIME sniffing功能的跨站点脚本攻击 IE有一个特性,那就是在将一个文件展示给用户之前会首先检查文件的类型,这乍看起来并没什么问题,但实际上这是相当危险的,因为这会允许IE执行图片 ...

  6. 吴裕雄 10-MySQL插入数据

    语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( ...

  7. SSM综合练习

    CRM系统 CRM项目外观 1. 开发环境 IDE: Eclipse Neon Release (4.6.0) Jdk: 1.8 数据库: MySQL 2. 创建数据库 创建crm数据库,这里使用的是 ...

  8. vue router 懒加载实现

    在vue-cli脚手架中router文件夹中有index.js文件,里面的内容是 import Vue from 'vue'import Router from 'vue-router'import ...

  9. 2018面向对象程序设计(Java)第9周学习指导及要求

    2018面向对象程序设计(Java)第9周学习指导及要求(2018.10.25-2018.10.28)   学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...

  10. linux centos 基本命令

    init 3 进入命令行界面. init 5 进入图形界面. ifconfig 查询IP地址. nmtui 设置网卡. su - root 是切换到root账号使用,使用的是root用户的环境变量:s ...