比赛的时候没有注意到 给出的up矩阵 能使我们随便选一列 确定这一列的rank

这样我们得出每一行列的rank 进行构图 大->小 然后从大到小放 当前放的点 和他有因果关系并且比他大的点必须已经被放了 并且这个图没有环

做一个topsort就可以了

但是会MLE 因为边的数量可能 600^3 这个图虽然满足拓扑图 但是它比拓扑图更满足一个严格的等级序列

所以可以只建600^2的边 每个点指向只比它小的点

需要判断输入的合法性

int n ;
int le[605][605] ;
int up[605][605] ;
int d[605][605] ;
int deg[605*605] ;
int ans[605][605] ; int head[605 * 605] ;
struct edge{
int v,nex;
}b[605 * 605 * 2] ;
int tot ;
void add(int u,int v){
tot ++ ;
b[tot].v=v ; b[tot].nex=head[u];
head[u]=tot ;
} bool topso() {
int cnt = n*n ;
queue<int>que ;
while(!que.empty()) que.pop() ;
rep(i,1,n*n) {
if(deg[i] == 0) {
que.push(i) ;
}
}
while(!que.empty()) {
int u = que.front() ; que.pop() ;
int x = (u+n-1)/n;
int y = (u%n) ; if(y==0)y=n;
ans[x][y] = cnt -- ;
rnode(i,u){
int v=b[i].v;
deg[v]--;
if(deg[v]==0){
que.push(v) ;
}
}
}
return cnt == 0 ;
} int main () {
tot = 0 ;
flc(head,-1) ;
n = read() ;
rep(i,1,n) rep(j,1,n) up[i][j] = read() ;
rep(i,1,n) rep(j,1,n) le[i][j] = read() ;
rep(i,1,n) rep(j,1,n) {
if(up[i][j] >= i || le[i][j] >= j) {
printf("0\n") ; return 0 ;
}
}
rep(i,1,n) rep(j,1,n) d[i][j] = (i-1)*n + j ;
flc(deg,0) ;
rep(i,1,n) {
int a[650] ;
a[1] = d[i][1] ;
rep(j,2,n) {
int m = le[i][j] ;
m ++ ;
dow(k,j,m+1) a[k] = a[k-1] ;
a[m] = d[i][j] ;
}
rep(j,1,n-1) {
add(a[j],a[j+1]) ;
deg[a[j+1]] ++ ;
}
}
rep(j,1,n) {
int a[650] ;
a[1] = d[1][j] ;
rep(i,2,n) {
int m = up[i][j] ;
m ++ ;
dow(k,i,m+1) a[k] = a[k-1] ;
a[m] = d[i][j] ;
}
rep(i,1,n-1) {
add(a[i],a[i+1]) ;
deg[a[i+1]] ++ ;
}
}
if(topso()) {
rep(i,1,n) rep(j,1,n) {
printf("%d" , ans[i][j]) ; fmt(j,n) ;
}
}
else {
printf("0\n") ;
}
}

Gym - 101503I 利用到图论的构造的更多相关文章

  1. Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉

    Problem H. Hard TestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...

  2. Gym 100801B Black and White(构造)

    题意:给定X,Y,分别表示由'.'和'@'组成的连通块的个数. 思路:假如X<Y,我们用两部分来构造这个结果,第一部分由一个'.'连通块和Y-(X-1)割'@'连通块组成,第二个部分由X-1个' ...

  3. CF Gym 100637J Superfactorial numeral system (构造)

    题意:给一个式子,ak,k>2时,0<=ak<k:ai都是整数,给你p,q让你求一组ak. 题解:构造,每次除掉q取整得到ai,然后减一减 #include<cstdio> ...

  4. Luogu3524 POI2011 Party 图论、构造

    题目传送门:https://www.luogu.org/problemnew/show/P3524 大意:给一个$N$个点的图,其中一定有一个大小为$\frac{2}{3}N$的团,程序需给出一个大小 ...

  5. GYM 101173 K.Key Knocking(构造)

    原题链接 参考自 问题描述:一个长度为3*n的01串,每次可以翻转连续的两个字符,要求至多翻转n次使得这个3*n的串至少有2*n个连续的段且相邻两端不一样(就是连续的0算一段,然后连续的1,…) 解法 ...

  6. Gym - 100513B:Colored Blankets (构造)(存疑)

    题意:给定N的棒棒,K种颜色,每个棒棒的两端可以涂色.现在已知所有的线段要么有一端涂色,要么两端都没有涂色,现在要求把所有的没涂色的部分涂色,使得我们可以把涂色后的棒棒分为N/K组,每组的涂色情况相同 ...

  7. Gym - 100851J: Jump(交互+构造+(大胆瞎搞)))

    题意:给定长度为N的01串,现在让你猜这个串,猜的次数要不超过N+500次. 每次你猜一个串,系统会返回N/2,或N,或0.当且当有N/2个位置猜对,N个位置猜对,其他. 思路:因为信息不多,没有关联 ...

  8. [SDOI2019]热闹又尴尬的聚会(图论+set+构造)

    据说原数据可以让复杂度不满的暴力O(Tn^2)过掉……O(Tn^2)方法类似于codeforces一场div2的E题 有一种比较好的方法:每次找出原图G中度最小的点加入q,然后将相邻的点加入新图G'. ...

  9. [Leetcode] Construct binary tree from preorder and inorder travesal 利用前序和中续遍历构造二叉树

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:  You may assume tha ...

随机推荐

  1. iOS 断当前时间是否在一天的某个时间段内。

    应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内.难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟 ...

  2. 【IDEA】Maven踩坑:pom文件中的默认profiles不生效+IDEA中Maven的profiles使用说明

    一.问题即分析 项目pom文件中的profiles有3个配置:dev.test和production 默认配置的是dev,如下图: 但在本地起服务时,读取的配置始终是test里的. 二.原因 2.1 ...

  3. Drupal 8 提供REST服务实例

    drupal8 的核心模块已经支持REST服务. 这样的话使用drupal 对外提供web service 变的简单了. 测试一下d8 的webservice : extend 中的 依赖模块:全部启 ...

  4. 微信公众号 拼团到期人数不足 db触发器 js触发器 剥离

    w注意当页面多个先后到期或同时到期的团时的用户体验 w保证了每次加载这个页面会是的过期的团不显示,马上到期的团会在页面存活期间进行页面更新和db操作: 但是这依赖了团状态值的更新必须依赖于有客户端页面 ...

  5. linux运维 vi vim q 的间接注释

    w q  --不发生写的写,无增删效果. 点q后,再次执行 vi /var/www/share/w.php 仍然会‘ Found a swap file by the name "/var/ ...

  6. iOS核心动画详解(CABasicAnimation)

    前言 上一篇已经介绍了核心动画在UI渲染中的位置和基本概念,但是没有具体介绍CAAnimation子类的用法,本文将介绍CABasicAnimation及其子类CASpringAnimation的用法 ...

  7. time/datetime/random/string/os/sys/shutil/zipfile/tarfile - 总结

    time 模块: time.time() #时间戳 time.localtime() #当前时间对象元组 time.localtime(123123) #根据时间戳的时间对象 time.mktime( ...

  8. PHP去除所有的空格

    1.去除两边的空格 trim($arr) 2.正则匹配去除所有的空格 preg_replace('# #','',$goodid)

  9. 静默安装oracle 11g及参数配置优化详解

    一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1           ...

  10. Android开发中string.xml文件的使用

    为什么需要把应用中出现的文字单独存放在string.xml文中呢? 一:是为了国际化,Android建议将在屏幕上显示的文字定义在strings.xml中,如果今后需要进行国际化,比如我们开发的应用本 ...