Gym - 101503I 利用到图论的构造
2017-10-10 14:21
330 查看
比赛的时候没有注意到 给出的up矩阵 能使我们随便选一列 确定这一列的rank
这样我们得出每一行列的rank 进行构图 大->小 然后从大到小放 当前放的点 和他有因果关系并且比他大的点必须已经被放了 并且这个图没有环
做一个topsort就可以了
但是会MLE 因为边的数量可能 600^3 这个图虽然满足拓扑图 但是它比拓扑图更满足一个严格的等级序列
所以可以只建600^2的边 每个点指向只比它小的点
需要判断输入的合法性
这样我们得出每一行列的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") ; } }
相关文章推荐
- 利用GDI+函数构造图形报表
- c++利用jsoncpp libcurl 构造http 包(原)
- GBDT原理及利用GBDT构造新的特征-Python实现
- 利用对称性原理构造回文素数
- 利用卷积神经网络(CNN)构造社区问答系统
- Python高级特性:利用类构造及析构原理实现单实例模式
- [构造] Codeforces Gym 101173 CERC 16 K & BZOJ 4796 Key Knocking
- 利用FarPoint Spread表格控件,构造Winform的Excel表格界面输入
- Sheldon Numbers Gym - 101128H 构造题,规律
- GYM 100801 B.Black and White(构造)
- Codeforces Gym 100342H Hard Test 构造
- 利用NIO构造简单的聊天功能
- 利用队列构造链接式完全二叉树
- 简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造
- [转]利用IoBuildDeviceIoControlRequest构造irp获得存储设备总线类型源代码
- Asp.net MVC 利用PartialView 构造自定义菜单
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何利用jts将点云构造成一个多边形
- GYM 101173 K.Key Knocking(构造)
- 利用卷积神经网络(CNN)构造社区问答系统