sdibt 1244类似于拓扑排序

博客:http://blog.csdn.net/mypsq/article/details/39005991
#include<stdio.h>
#include<string.h>
#define N 30
struct node {
int x,y,xx,yy;
}f[N],ff[N];
int link[N],visit[N];
int main() {
     int n,m,i,j,k,cou,index,cnt;
     while(scanf("%d",&n)!=EOF) {
        for(i=1;i<=n;i++)
            scanf("%d%d%d%d",&f[i].x,&f[i].xx,&f[i].y,&f[i].yy);
        for(i=1;i<=n;i++)
            scanf("%d%d",&ff[i].x,&ff[i].y);
            memset(link,0,sizeof(link));
            memset(visit,0,sizeof(visit));
            cnt=0;
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++) {
                if(visit[j])continue;
                cou=0;
            for(k=1;k<=n;k++) {
                    if(link[k])continue;
                if(ff[j].x>=f[k].x&&ff[j].x<=f[k].xx&&ff[j].y>=f[k].y&&ff[j].y<=f[k].yy) {
                    cou++;
                    index=k;
                }
            }
            if(cou==1) {
                link[index]=j;
                visit[j]=1;
                cnt++;
            }
        }
        if(cnt!=n) {
            printf("None\n");
            continue;
        }
        for(i=1;i<=n;i++)
            printf("%c %d\n",'A'+i-1,link[i]);
     }
return 0;
}

时间: 2025-01-02 13:33:59

sdibt 1244类似于拓扑排序的相关文章

拓扑排序 codevs 4040 cojs 438

codevs 4040 EZ系列之奖金 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 由于无敌的WRN在2015年世界英俊帅气男总决选中胜出,EZ总经理Mr.Lin心情好,决定给每位员工发奖金.EZ决定以每个人本年在EZ的贡献为标准来计算他们得到奖金的多少. 于是Mr.Lin下令召开m方会谈.每位参加会谈的代表提出了自己的意见:“我认为学生a的奖金应该比b高!”Mr.Lin决定要找出一种奖金方案,满足各位代表的意见,且同时

CSU 1804: 有向无环图(拓扑排序)

http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1804 题意:…… 思路:对于某条路径,在遍历到某个点的时候,之前遍历过的点都可以到达它,因此在这个时候对答案的贡献就是∑(a1 + a2 + a3 + ... + ai) * bv,其中a是之前遍历到的点,v是当前遍历的点. 这样想之后就很简单了.类似于前缀和,每次遍历到一个v点,就把a[u]加给a[v],然后像平时的拓扑排序做就行了. 1 #include <bits/stdc++.h>

图的遍历:拓扑排序

[需要解决的问题] 对一个有向无环图(DAG)拓扑排序. 拓扑排序就是,对图上的点进行排序,使得排在后面的点不能通过一条路径到前面的点. 比如下面这个图: 其中一个拓扑排序是1,2,3,4,5:而1,2,5,3,4就不行,因为3能到达5. 因此可以得出: 用一个队列实现,先把入度为0的点放入队列,每次将队首元素加入ans[i-j]中,删除队首元素,并删除该点连接的所有边,于是每次删除一个点都会产生一个新的入度为0的点,再把这个点插入队列,递归即可. 拓扑排序 模板如下: //复杂度:O(N+M)

图的拓扑排序(转)

一.概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前.   通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列.注意:   ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从左指向右的.   ②若图中存在有向环,则不可能使顶点满足拓扑次序.   ③一个DAG的拓扑序列通常表示某种方案

算法与数据结构基础10:C++实现——拓扑排序

一 定义 拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序, 它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面. 二 先决条件 能够进行拓扑排序图有两个先决条件:有向.无环,即有向无环图. 三 偏序全序 连通图:任意两点之间都存在至少一条边 偏序:非连通图(有向无环图满足偏序关系) 全序:单连通图 四 结果唯一性 对于仅满足偏序关系的有向无环图中,因为有两个点之间的关系是不确定的,所以导致排序的结果是不唯一的. 满足全序关系的有

【每日算法】图算法(遍历&amp;MST&amp;最短路径&amp;拓扑排序)

图有邻接矩阵和邻接表两种存储方法,邻接矩阵很简单,这里不讨论,下面我们先看看常用的邻接表表示方法. 邻接表常用表示方法 指针表示法 指针表示法一共需要两个结构体: struct ArcNode //定义边表结点 { int adjvex: //邻接点域 ArcNode* next; }; struct VertexNode //定义顶点表结点 { int vertex; ArcNode* firstedge; }; 每个节点对应一个VertexNode,其firstedge指向边表(与当前节点邻

算法导论22.4拓扑排序 练习总结 (转载)

22.4-1 给出算法 TOPOLOGICAL-SORT 运行于图 22-8 上时所生成的结点次序.这里的所有假设和练习 22.3-2 一样. ANSWER:   22.4-2 请给出一个线性时间的算法,算法的输入为一个有向无环图 G = (V, E) 以及两个结点 s 和 t,算法的输出是从结点 s 到结点 t 之间的简单路径的数量.例如,对于图 22-8 所示的有向无环图,从结点 p 到结点 v 一共有 4 条简单路径,分别是 pov.poryv.posryv 和 psryv.(本题仅要求计

BZOJ 1565 植物大战僵尸(拓扑排序+最大权闭合子图)

图中的保护关系就类似于最大权闭合子图.即你想杀x,你就一定要杀掉保护x的点,那么把x向保护它的点连边.那么题目就转化成了最大权闭合子图的问题. 但是这个图有点特殊啊... 考虑有环的情况,显然这个环以及指向这个环的点都不能选. 所以还要把这个图的反图进行一遍拓扑排序,这样忽略掉了这些点了... # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # i

拓扑排序,逻辑开关

拓扑排序 是的,这个名字很怪.我们可以找一个直观的名字去描述拓扑排序,这个名字叫做不包含强连通子图.类似于不能出现1是2的父亲,2是1的父亲(这是一个很奇葩的例子)那么这种含有强连通子图,那么就倒霉了,他就不叫拓扑图,那么就无法用来dp了(这个后面会说) 那么如果没有类似于强连通子图(连通图),那么就恭喜你,这道题就可以使用dp来进行解决了,如果你的dp不熟悉,那么也可以另找退路,类似于记忆化搜索解决(这个后面会说到). 拓扑作用 如果你想使用dp解决在图中的题目,你必须保证此图是拓扑图. 如果