bzoj 1242: Zju1015 Fishing Net 弦图判定
1242: Zju1015 Fishing Net弦图判定
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 214 Solved: 81
[Submit][Status][Discuss]
Description
在
一个高度信息化的渔村,鱼网的制作和修补都是由电脑完成。众所周知,鱼网是由网组成的(废话),网组成的东西叫网眼。如果网眼够小,就能捕到很多鱼;如果
网眼太大,鱼就会全部漏走。每次捕鱼回来,鱼网都会烂得很厉害,小网眼会变成网眼,那鱼网就需要修补。他们希望有一个程序能够为他们判断鱼网是否需要修
补。程序会把鱼网看作一个联通的图(不用进一步解释了吧)。他们的判断方法是:任何一个长度(组成其的边的数目)超过3的闭合的圈,都必须有一条交线将它
分作两部分。(提示:递归下去,其实就是每个网眼都只能是三角形)如果合乎要求,程序就输出“Perfect",否则输出"Imperfect".
注:这里的交线是指一个联结一封闭圈的不同结点而捕属于该圈的一条边。
Input
数据以一行N M开始,表示鱼网有N个结点和M条边。(n<=0<=1000)以下M行是M条边的描述。每行两个整数A,B,表示结点A与结点B之间存在一条边。
Output
输出每个鱼网的测试结果,Perfect或Imperfect
Sample Input
1 2
2 3
3 4
4 1
Sample Output
HINT
Source
弦图裸题,就是边的范围是n^2,而不是n。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
using namespace std;
#define MAXN 1010
#define MAXE MAXN*MAXN*2
#define MAXV MAXN
struct Edge
{
int np;
Edge *next;
}E[MAXE],*V[MAXV];
int tope=-;
void addedge(int x,int y)
{
E[++tope].np=y;
E[tope].next=V[x];
V[x]=&E[tope];
}
bool vis[MAXN];
int deg[MAXN];
priority_queue<pair<int,int> > PQ;
vector<int> seq;
int rk[MAXN];
set<pair<int,int> > S; int main()
{
freopen("input.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
int x,y;
for (int i=;i<m;i++)
{
scanf("%d%d",&x,&y);
if (S.find(make_pair(x,y))!=S.end())continue;
addedge(x,y);
addedge(y,x);
S.insert(make_pair(x,y));
S.insert(make_pair(y,x));
}
PQ.push(make_pair(,));
while (!PQ.empty())
{
Edge *ne;
pair<int,int> pr=PQ.top();
PQ.pop();
if (vis[pr.second] || deg[pr.second]!=pr.first)continue;
seq.push_back(pr.second);
vis[pr.second]=true;
for (ne=V[pr.second];ne;ne=ne->next)
{
if (!vis[ne->np])
{
deg[ne->np]++;
PQ.push(make_pair(deg[ne->np],ne->np));
}
}
}
if (seq.size()!=n)
{
// printf("Imperfect\n");
// return 0;
}
for (int i=;i<seq.size()/;i++)
swap(seq[i],seq[seq.size()--i]);
for (int i=;i<seq.size();i++)
rk[seq[i]]=i;
vector<int> vec;
for (int i=;i<seq.size();i++)
{
int now=seq[i];
Edge *ne;
vec.clear();
for (ne=V[now];ne;ne=ne->next)
{
if (rk[ne->np]>rk[now])
{
vec.push_back(rk[ne->np]);
}
}
sort(vec.begin(),vec.end());
for (int i=;i<vec.size();i++)
vec[i]=seq[vec[i]];
for (int i=;i<vec.size();i++)
{
if (S.find(make_pair(vec[],vec[i]))==S.end())
{
printf("Imperfect\n");
return ;
}
}
}
printf("Perfect\n");
}
bzoj 1242: Zju1015 Fishing Net 弦图判定的更多相关文章
- [bzoj1242] Zju1015 Fishing Net弦图判定
弦图判定..MCS算法. 先选一个点,然后每次拿 相邻已选点最多 的未选点. 选完之后判断一下是否是完美消除序列. #include<cstdio> #include<iostrea ...
- bzoj 1242 弦图判定 MCS
题目大意: 给定一张无向图,判断是不是弦图. 题解: 今天刚学了<弦图与区间图> 本来写了一个60行+的学习笔记 结果因为忘了保存重启电脑后被还原了... 那就算了吧. MCS最大势算法, ...
- ZOJ 1015 Fishing Net(弦图判定)
In a highly modernized fishing village, inhabitants there make a living on fishery. Their major tool ...
- ZOJ 1015 弦图判定
一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...
- bzoj1242(弦图判定)
cdqppt地址:https://wenku.baidu.com/view/a2bf4ad9ad51f01dc281f1df.html: 代码实现参考的http://blog.csdn.net/u01 ...
- Zju1015 Fishing Net
弦图判定 代码 #include<cstdio> #include<queue> #define mp make_pair #define fi first #define s ...
- ●BZOJ 1006 [HNOI2008]神奇的国度(弦图最小染色数)○ZOJ 1015 Fishing Net
●赘述题目 给出一张弦图,求其最小染色数. ●题解 网上的唯一“文献”:<弦图与区间图>(cdq),可以学习学习.(有的看不懂) 摘录几个解决改题所需的知识点: ●子图和诱导子图(一定要弄 ...
- BZOJ 1006 完美消除序列&最大势算法&弦图
K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...
- 弦图的判定MCS算法(zoj1015)
题意:裸的弦图的判定: 弦图定义:给出一个无向连通图,如果每个环中都存在至少一条弦(环中存在不相邻的两点直接相连)这样的图叫做弦图: 转载:http://blog.csdn.net/crux_d/ar ...
随机推荐
- 第四十一篇、Masonry利用Block实现链式编程
一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现, 一直都没弄明白,直到最近看见一篇叫block实现链式编程的 1.方法的返回类型是代码块 >代码块的返回类型是该类的 ...
- Cocos移植到Android-Android.mk编译文件
我们在上一篇博客中年使用的cocos工具对于C和C++源代码进行编译.事实上cocos工具读取<游戏工程目录>\proj.android\jni\目录中的Android.mk文件,进行交叉 ...
- 操作Excel导入的问题(转)
当Excel导入成为需要时,之前的导出Excel为html方式的方法就受阻了,于是,需要开始新的百度与google来解决问题. 前提为OLEDB+Excel. 根据需求,多数是对于表的数据的导入.于是 ...
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
- CSS的浮动和清除
CSS浮动和清除 什么是浮动? 在实现效果上,让元素浮起来(飘起来),动起来(向左或向右移动) 浮动本质:就是将两个块元素同存一行. float 取值:主要是对浮动的方向进行控制 left:让元素向左 ...
- easyloader [easyui_1.4.2] 分析源码,妙手偶得之
用easyui很久了,但是很少去看源码. 有解决不了的问题就去百度... 今日发现,easyui的源码不难懂. 而且结合 easyloader 可以非常方便的逐个研究easyui的组件. 但是, ea ...
- Java使用泛型类来提高方法的可重用性
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832268.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- hash桶
#include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...
- OpenCV3读取、写入和保存图像
需要说明的是在OpenCV3中已经将imread()和imwrite()函数转移到imgcodecs模块中,因此读写图像时,需要包含imgcodecs.hpp头文件,但是highgui.hpp头文件中 ...
- ECSSHOP表结构
ECSSHOP表结构 -- 表的结构 `ecs_account_log`CREATE TABLE IF NOT EXISTS `ecs_account_log` (`log_id` mediumint ...