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 ...
随机推荐
- Quartz Scheduler(2.2.1) - hello world
简单示例 1. maven 依赖 <dependencies> <dependency> <groupId>org.quartz-scheduler</gro ...
- django 学习-6 定义模型--数据库的使用
1.service mysqld start 首先数据库是可用的 2.rpm -qa |grep MySQL-python 这个包是存在的 3.vim settings 修改databases 加 ...
- As,is含义?using 语句
Is:检查对象是否与给定的类型兼容.例如,下面的代码可以确定MyObject类型的一个实例,或者对象是否从MyObject派生的一个类型: if(obj is MyObject){} ...
- C#的提交表单方式WebClient
向网站提交页面的主要代码 string postString = "arg1=a&arg2=b";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form ...
- BootStrap glyphicons字体图标
本章将讲解Bootstrap glyphicons字体图标,并通过一些实例了解它的使用,字体图标是在 Web 项目中使用的图标字体.字体图标在下载的Bootstrap的fonts文件夹中 本章将讲 ...
- svn 服务器的搭建 on Ubuntu
Subversion 如何在Ubuntu下安装配置Subversion服务器.已经配置好,不过没有配置开机自启动, 需要的时候,使用如下命令开启svn服务svnserve -d -r /opt/s ...
- UIDynamic 基础认识
UIDynamic 是从iOS 7开始引入的一种新技术,属于UIKit框架,可以模拟现实生活中的物理现象,如:碰撞.抖动.摆动等 动力效果:有一个效果器,叫做“动力效果器”里面面可以添加“动力效果” ...
- LINQ(隐式表达式、lambda 表达式)
.NET 中一项突破性的创新是 LINQ(Language Integrated Query,语言集成查询),这组语言扩展让你能够不必离开舒适的 C# 语言执行查询. LINQ 定义了用于构建查询表达 ...
- 为什么要使用jQuery?
首先必须得了解为什么要学习JQuery,JQuery有哪些优点,当然是相对于传统的Javascript和DOM来说了,现在将JQuery的优势总结如下: 1,轻量级. JQuery非常小,压缩包只有1 ...
- 《C++ Qt 设计模式》8|15拼图 小游戏的简单实现。拜托,别乱点!
第零章:介绍 看到这个游戏了,感觉蛮好玩的,实现了一下. 界面如下: 游戏玩法:在3×*3的矩阵中,每个按钮都可以点击,如果按钮四周有一个是空白,则点击此按钮则会移动到这个空白.按钮字母顺序变成“AB ...