题意

有三种药丸,白色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. python_03 各种运算符

    1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 先计算括号中表达式 计算顺序:and,or,not在一个表达式中从前到后计算, 若and前一个元素为false则立刻返回为False,不计算后面 ...

  2. JSONArray

    action层 js alert(result);   result返回的是[{"countryId":"","id":"1&qu ...

  3. for循环实例2

    九九乘法表: //九九乘法表 ; x < ; x++) { ; y <=x;y++ ) { Console.Write(y.ToString()+"*"+x.ToStr ...

  4. Web安全颜色

    Web安全色产生的原因 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别 ...

  5. 如何使用JBDC修改数据

    1.JDBC取得数据库Connection连接对象conn, Connection conn=null;   //数据库连接对象 String strSql=null;    //sql语句对象 // ...

  6. 计算平面面积和斜面面积-ArcGIS案例学习笔记

    计算平面面积和斜面面积-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据:实验数据\Chp8\Ex5\demTif.tif 平面面积= ...

  7. linux 挂载磁盘

    挂在磁盘操作(还有一个300G的盘没显示出来): [root@iZgo67bo9s3uaijzqrgbaxZ ori]# df -h  Filesystem            Size  Used ...

  8. SSM框架简介及整合教程

    1.Spring Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (控制反转) 和 A面向切面编程).Spring框架是个轻量级的Java E ...

  9. xm数据写入

    reshape有两个参数: 其中,参数:cn为新的通道数,如果cn = 0,表示通道数不会改变. 参数rows为新的行数,如果rows = 0,表示行数不会改变. 注意:新的行*列必须与原来的行*列相 ...

  10. File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

    1.centos7 系统,自带python2.7 ,我安装了python3.5 并设置为系统默认python ,yum 语法不支持 2.解决办法: ls /usr/bin | grep python选 ...