题意:总共有n+m个点,每一个点都有一个val,给出一个n*m的矩阵,矩阵中第i行第j列的为=,表示 i 点 和 j+n个点的值相等,<表示i 点比j+n个点的值小,> 刚好相反

要求用最少的值给每一个点确定一个val,满足如上那个矩阵,如果不存在输出Yes

存在输出每一个点的val

题解:大小关系可以转化为有向边,等于关系则是利用并查集进行缩点,因此value的分配可以利用拓扑排序来解决,如果存在环说明无解

具体细节看代码

int fa[maxn];

int Find(int x){
return fa[x]==x?x:fa[x]=Find(fa[x]);
} int n,m; char sym[1005][1005]; int id[maxn]; int head[maxn],ver[maxm],nex[maxm],tot; void inline AddEdge(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
} int d[maxn]; bool vis[maxn]; int main(){
cin>>n>>m;
for(int i=1;i<=n+m;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>sym[i][j];
if(sym[i][j]=='=') {
int px=Find(i),py=Find(j+n);
if(px!=py){
fa[px]=py;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(sym[i][j]=='<') {
AddEdge(Find(i),Find(j+n));
d[Find(j+n)]++;
}
else if(sym[i][j]=='>'){
AddEdge(Find(j+n),Find(i));
d[Find(i)]++;
}
}
}
queue<int> q;
for(int i=1;i<=n+m;i++)
if(!d[Find(i)]) q.push(Find(i));
while(q.size()){
int x=q.front();q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
d[y]--;
id[y]=max(id[y],id[x]+1);
if(!d[y]) {
q.push(y);
}
}
}
for(int i=1;i<=n+m;i++)
if(d[Find(i)]) {
cout<<"No";
return 0;
}
puts("Yes");
for(int i=1;i<=n;i++)
cout<<id[Find(i)]+1<<' ';
cout<<endl;
for(int i=1;i<=m;i++)
cout<<id[Find(i+n)]+1<<' ';
cout<<endl;
}

  

cf1131D的更多相关文章

  1. CF1131D Gourmet choice

    题目链接 题意 有两组菜,第一组有\(n\)种,第二组有\(m\)种.给出一个\(n\times m\)的矩阵,第\(i\)行第\(j\)列表示第一组中的第\(i\)种菜与第二组中的第\(j\)种菜好 ...

  2. CF1131D Gourmet choice(并查集,拓扑排序)

    这题CF给的难度是2000,但我感觉没这么高啊…… 题目链接:CF原网 题目大意:有两个正整数序列 $a,b$,长度分别为 $n,m$.给出所有 $a_i$ 和 $b_j(1\le i\le n,1\ ...

  3. CF1131D tarjan,拓扑

    题目链接 541div2 http://codeforces.com/contest/1131/problem/D 思路 给出n序列和m序列的相对大小关系 构造出最大值最小的序列 缩点+拓扑 小的向大 ...

  4. 拓扑排序+并查集——cf1131D

    以前做过了忘记掉了..拓扑排序如果要处理等于关系,就要用并查集把相等关系进行缩点 /* 1.相等关系用并查集合并 2.不等关系用有向边链接 3.拓扑排序求顺序 */ #include<bits/ ...

  5. BZOJ3436: 小K的农场(差分约束裸题&DFS优化判环)

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2111  Solved: 986[Submit][Status][Discus ...

随机推荐

  1. Spring 依赖注入两种方式

    (1):通过 setter 方法注入: <property name=“ ” ></property> 其中,name属性的取值依setter方法名而定,要求这个类里面这个对应 ...

  2. appcompat_v7 res values-v21 error

    [2014-11-03 11:30:25 - AndroidApp] appcompat_v7/res/values-v21/styles_base.xml:75: error: Error retr ...

  3. [apue] 书中关于伪终端的一个纰漏

    在看 apue 第 19 章伪终端第 6 节使用 pty 程序时,发现“检查长时间运行程序的输出”这一部分内容的实际运行结果,与书上所说有出入. 于是展开一番研究,最终发现是书上讲的有问题,现在摘出来 ...

  4. A Hybrid Data Association Framework for Robust Online Multi-Object Tracking(2017 IEEE Transactions on Image Processing)

    A Hybrid Data Association Framework for Robust Online Multi-Object Tracking 一种用于鲁棒在线多目标跟踪的混合数据关联框架 摘 ...

  5. BZOJ 2434 阿狸的打字机(ac自动机+dfs序+树状数组)

    题意 给你一些串,还有一些询问 问你第x个串在第y个串中出现了多少次 思路 对这些串建ac自动机 根据fail树的性质:若x节点是trie中root到t任意一个节点的fail树的祖先,那么x一定是y的 ...

  6. NJUPT_Wrj 个人训练实录

    9暑假了,开个训练实录,记录自己每天的训练以及补题(仅含个人训练,组队训练另开坑)希望能坚持下去QAQ 7.5日常:BZOJ1607线性筛.1601MST.1602LCA.1606背包.1625背包比 ...

  7. 业余无线电A类考试准备笔记

    在线模拟自测地址:https://liunan.github.io/crac/ 共361题,到LK0074 1004/2890行 Key Word: 要合法 要服从管理 Note: 无线电管理 最高法 ...

  8. Shell脚本 server rsync 控制脚本

    [root@backup ~]# vim /etc/init.d/rsync#!/bin/bash #this script for start|stop rsync daemon service s ...

  9. 学习CSS之如何改变CSS伪元素的样式

    一.CSS伪元素 CSS 伪元素用于向某些选择器设置特殊效果. 伪元素的用法如下: selector:pseudo-element {property:value;} CSS 类也可以和伪元素搭配使用 ...

  10. 浅谈Linux与unix系统的来历

    在今天的UNIX是商业化的,UNIX系统大多是与硬件配套的,也就是说,大多数UNIX系统如AIX.HP-UX等是无法安装在 x86 服务器和个人计算机上的,UNIX系统是一个分时系统,而UNIX是至关 ...