Uva1624 Knots
极其鬼畜的题。
初见根本没有思路。
二见根本没有思路。
……
多年(并不)之后突然想到,也许可以用链表模拟。
先用链表把每一个节点串起来,并对有覆盖的地方进行标记。
模拟解锁操作,如果一个节点和它所覆盖的节点之间没有其他结,那么进行逆self loop操作。
同理进行逆passing操作。
如果能把所有的结都解开,则答案是有解。
优化:把没有覆盖/被覆盖的节点提前删掉,缩短链表长度。
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<list> 8 using namespace std; 9 int read(){ 10 int x=0,f=1;char ch=getchar(); 11 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 12 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 13 return x*f; 14 } 15 struct node{ 16 int pre,nxt; 17 }a[1000010]; 18 int link[1000010]; 19 int ud[1000010]; 20 int L,P; 21 void Del(int x){ 22 ud[x]=0; 23 a[a[x].pre].nxt=a[x].nxt; 24 a[a[x].nxt].pre=a[x].pre; 25 } 26 int T; 27 int main(){ 28 T=read(); 29 int L,P,i,j; 30 for(int cas=1;cas<=T;cas++){ 31 memset(link,0,sizeof link); 32 memset(ud,0,sizeof ud); 33 L=read();P=read(); 34 for(i=0;i<L;i++){ 35 a[i].pre=i-1; 36 a[i].nxt=i+1; 37 } 38 a[0].pre=L-1;a[L-1].nxt=0; 39 int u,v; 40 for(i=1;i<=P;i++){ 41 u=read();v=read(); 42 link[u]=v;link[v]=u; 43 ud[u]=1;ud[v]=-1;//???? 44 } 45 for(i=0;i<L;i++)if(!ud[i])Del(i); 46 int hd=0; 47 while(P){ 48 bool flag=1; 49 while(!ud[hd])hd++; 50 for(i=a[hd].nxt; i!=hd && flag; i=a[i].nxt){ 51 int u=i,v=a[i].nxt; 52 if(ud[u]==ud[v] && (a[link[u]].nxt==link[v] || 53 a[link[v]].nxt==link[u])){ 54 Del(u); Del(v); 55 Del(link[u]); 56 Del(link[v]); 57 P-=2; 58 flag=0; 59 } 60 //passing 61 else if(link[v]==u || link[u]==v){ 62 Del(u);Del(v); 63 P--; 64 flag=0; 65 } 66 //selfloop 67 } 68 if(flag)break; 69 } 70 printf("Case #%d: ",cas); 71 if(!P)printf("YES\n"); 72 else printf("NO\n"); 73 } 74 return 0; 75 }
转载于:https://www.cnblogs.com/SilverNebula/p/6089828.html
Uva1624 Knots相关推荐
- 【算法特训总结】计算机经典算法的核心思想及独特角度的解读
计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
- 习题 8-28 打结(Knots, ACM/ICPC ACM/ICPC Jakarta 2012, UVa1624)
原题链接:https://vjudge.net/problem/UVA-1624 分类:思维题 备注:好题,模拟 实在没有什么明确的思路,一开始想解开绳子变成圆,不会.然后想是不是和奇偶性有关,也找不 ...
- yard码 / meter英里 / kilometer 千米/Knots 海里 换算
最佳答案: 1码(yard)=0.9144米(m) 1米(m)=1.0936132983377码(yard) 英里Miles=1 609米(m) /1 760码(yard) 1 海里(Knots)=1 ...
- UVa 1624 打结(Knots)
略 代码: #include<bits/stdc++.h> #define LL long long #define ms(s) memset(s, 0, sizeof(s)) #defi ...
- Knots UVA - 1624
首先是初始化节点的状态信息,记录每个节点的左节点编号以及右节点标号,然后删除那些没有遮挡别的节点并且没有被别的节点遮挡的节点,然后开始下面的循环删除节点的过程,因为被遮挡以及遮挡其他节点的总数是2*P ...
- matlab knots,chronux_2_12.v02 chrounx是matlab的一个工具包(a toolbox for matlab) - 下载 - 搜珍网...
压缩包 : ef9830f1359cff75ebece428470410dd.zip 列表 chronux_2_12/ chronux_2_12/instructions.txt chronux_2_ ...
- c语言gps数据类型,GPS数据格式
该协议信息包括GGA位置测定系统的定位资料.GSV导航卫星资料.RMC导 航卫星特定精简资料.VTG方向及速度等相关资料.这里以接收GGA数据为例, 给出的格式如下: $GPGGA, hhmmss,d ...
- OpenGL编程轻松入门(四)
1. 曲面和曲线 前面我们讲了如何绘制平面的图形,这一节我们学习如何绘制曲线和曲面. 例10:绘制一个曲面,本程序使用二维求值器绘制一个曲面.本例中也有一些特殊效果的操作. #incl ...
最新文章
- mysql5.5数据库操作_命令行下mysql数据库基本操作
- Linux安装gitbook
- WampServer下如何实现多域名配置
- react学习(18)----vs 全局搜索
- 今天起,我们喝的百年牛奶要变了!
- Python_爬虫_BeautifulSoup网页解析库
- 解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题
- Keepalived-在没有之前配置的Nginx高可用(不建议采纳)
- vue修改数组元素方法
- java 计算限行尾号(北京)
- ASCll码字符对照表
- redis实现CAS
- 熟悉继承(java)
- 仲裁器设计(4)Weighted Round Robin
- Vivado IP核之定点数转为浮点数Floating-point
- 【upc】生命曲线(线段树) —— 一个能让你搞懂线段树懒标的题目
- mysql 按记录编号_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
- 16岁初中生开发的软件,强大到令人发指!
- 糟糕!我的服务器CPU被黑客挖矿了
- 厦门航空谁让你如此霸王