Uva1624 Knots
极其鬼畜的题。
初见根本没有思路。
二见根本没有思路。
……
多年(并不)之后突然想到,也许可以用链表模拟。
先用链表把每一个节点串起来,并对有覆盖的地方进行标记。
模拟解锁操作,如果一个节点和它所覆盖的节点之间没有其他结,那么进行逆self loop操作。
同理进行逆passing操作。
如果能把所有的结都解开,则答案是有解。
优化:把没有覆盖/被覆盖的节点提前删掉,缩短链表长度。
/*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<list>
using namespace std;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct node{
int pre,nxt;
}a[];
int link[];
int ud[];
int L,P;
void Del(int x){
ud[x]=;
a[a[x].pre].nxt=a[x].nxt;
a[a[x].nxt].pre=a[x].pre;
}
int T;
int main(){
T=read();
int L,P,i,j;
for(int cas=;cas<=T;cas++){
memset(link,,sizeof link);
memset(ud,,sizeof ud);
L=read();P=read();
for(i=;i<L;i++){
a[i].pre=i-;
a[i].nxt=i+;
}
a[].pre=L-;a[L-].nxt=;
int u,v;
for(i=;i<=P;i++){
u=read();v=read();
link[u]=v;link[v]=u;
ud[u]=;ud[v]=-;//????
}
for(i=;i<L;i++)if(!ud[i])Del(i);
int hd=;
while(P){
bool flag=;
while(!ud[hd])hd++;
for(i=a[hd].nxt; i!=hd && flag; i=a[i].nxt){
int u=i,v=a[i].nxt;
if(ud[u]==ud[v] && (a[link[u]].nxt==link[v] ||
a[link[v]].nxt==link[u])){
Del(u); Del(v);
Del(link[u]);
Del(link[v]);
P-=;
flag=;
}
//passing
else if(link[v]==u || link[u]==v){
Del(u);Del(v);
P--;
flag=;
}
//selfloop
}
if(flag)break;
}
printf("Case #%d: ",cas);
if(!P)printf("YES\n");
else printf("NO\n");
}
return ;
}
Uva1624 Knots的更多相关文章
- Knots(找规律)
Knots Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- OpenNURBS to OpenCASCADE
OpenNURBS to OpenCASCADE eryar@163.com Abstract. The OpenNURBS initiative provides CAD/CAM/CAE and c ...
- OpenCASCADE Conic to BSpline Curves-Circle
OpenCASCADE Conic to BSpline Curves-Circle eryar@163.com Abstract. The conic sections and circles pl ...
- OpenCASCADE Conic to BSpline Curves-Hyperbola
OpenCASCADE Conic to BSpline Curves-Hyperbola eryar@163.com Abstract. Rational Bezier Curve can repr ...
- OpenCASCADE Conic to BSpline Curves-Parabola
OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can repre ...
- OpenCascade B-Spline Basis Function
OpenCascade B-Spline Basis Function eryar@163.com Abstract. B-splines are quite a bit more flexible ...
- GPS数据读取与处理
GPS数据读取与处理 GPS模块简介 SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面登上了一个顶峰,灵敏度比以前的产品大 ...
- words
conscious[英][ˈkɒnʃəs][美][ˈkɑnʃəs]consensus[英][kənˈsensəs][美][kənˈsɛnsəs] scious sensuswaterflood; de ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数016,xld,xld轮廓
<zw版·Halcon-delphi系列原创教程> Halcon分类函数016,xld,xld轮廓 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...
随机推荐
- web一周
学习web有一周了,老师进度有点小快,但是我还是感觉挺不错的. 对于一开始什么都不认识到能看懂是什么意思,并且可以写一些内容,我感觉还是比较欣慰,老师还是比较负责的,我每次都去找更远的代码学习 ...
- C#并行编程中的Parallel.Invoke
一.基础知识 并行编程:并行编程是指软件开发的代码,它能在同一时间执行多个计算任务,提高执行效率和性能一种编程方式,属于多线程编程范畴.所以我们在设计过程中一般会将很多任务划分成若干个互相独立子任务, ...
- 【转】CSS Sprites教程大全(使用方法、工具介绍)
什么是CSS Sprite CSS Sprite 又叫CSS精灵,是目前大型网站中经常运用的图片处理方式.它的原理很简单,将网站上零散的小图片(或图标)整合在一张大图上,再用CSS中“backgrou ...
- OpenCV中的神器Image Watch
Image Watch是在VS2012上使用的一款OpenCV工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用.跟VS2012配合使用,简直就是一款神器!让我一下就 ...
- 排序图解:js排序算法实现
之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...
- C程序中对时间的处理——time库函数详解
包含文件:<sys/time.h> <time.h> 一.在C语言中有time_t, tm, timeval等几种类型的时间 1.time_t time_t实际上是长整数类型, ...
- C语言strcat()函数:连接字符串
头文件:#include <string.h> strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); ...
- Allegro 中手动制作螺丝孔封装
以直径2.5mm的螺丝孔为例: 添加过孔,通常过孔的尺寸稍大于实际的螺丝直径,这里设置为2.8mm的直径. 添加过孔焊盘的其他属性. 制作边上的小焊盘. 新建Package Symbol然后点击Lay ...
- Change Eclipse Tooltip's Color in Ubuntu
这个问题十分高级,随着Ubuntu版本的变迁这个问题的解决方案也在不断变化 最开始,SystemSettings里面可以设置工具条背景色,后来这个选项在新版本Ubuntu中消失了 我用过Ubuntu1 ...
- 【jQuery EasyUI系列】使用属性介绍
1.ValidateBox The validatebox is designed to validate the form input fields.If users enter invalid v ...