题意

有三种药丸,白色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. Yum安装MySQL以及相关目录路径和修改目录

    有些时候,为了方便,有些同学喜欢通过yum的方式安装MySQL,没有设置统一的文件目录以及软件目录,那么就会为后续的维护工作带来很大的麻烦! 下面就简单介绍一下yum安装MySQL的步骤以及这类安装下 ...

  2. mysql每天凌晨0点准时启动taskeng.exe如何关闭

    MySQL弹出一个taskeng.exe. 内容如下:=====================Start Initialization====================mysql Instal ...

  3. svn分支

    在svn上我们除过一般的保存文档外,对于开发source,可以使用 trunk(主线),branch(分线), tag(上线或测试用) 做分支应用开发. trunk上建立代码位置,存放代码. 点击Te ...

  4. JAVA_连接池、DataSource、JNDI

    1.连接池    Connection的取得和开放是代价比较高的处理,解决这个问题的方法是连接池.    连接池就是事先取得一定数量的Connection,程序执行处理的时候不是新建Connectio ...

  5. docker-compose初试及命令基础

    转自:https://www.cnblogs.com/jsonhc/p/7811929.html 以一个简单的lnmp.yaml的配置文件进行讲解docker-compose命令的基础讲解,熟练掌握命 ...

  6. [SQL]UNPIVOT 多個欄位

    有朋友問「如何直接unpivot成2個欄位」,如下所示, 先準備測試資料如下, view source print? 01 create table T ( 02 no varchar(10), 03 ...

  7. Open Tools API :IDE Main Menus

    http://www.davidghoyle.co.uk/WordPress/?p=777 http://www.davidghoyle.co.uk/WordPress/?page_id=1110 h ...

  8. Arcgis Runtime 100.3开发实例源代码调试日志

    Arcgis Runtime 100.3开发实例源代码调试日志 路径: "D:\arcgis runtime1003\arcgis-runtime-samples-dotnet-master ...

  9. SQL中ISNULL的问题。

    今天在写SQL代码的时候写了个 ISNULL(变量1,变量2),返回的结果居然是 "*" ,这个星号,郁闷了很久. 代码大意如下: ) declare @str2 int sele ...

  10. vue set

    Vue 可以通过数组变异的方法可以控制数组的增减,却不能更改数组及对象,vue可以通过set方法改变数组的长度,改变某项的值,在组件中可以使用$set方法改变数组长度和某项的值 调用方法:Vue.se ...