极其鬼畜的题。

初见根本没有思路。

二见根本没有思路。

……

多年(并不)之后突然想到,也许可以用链表模拟。

先用链表把每一个节点串起来,并对有覆盖的地方进行标记。

模拟解锁操作,如果一个节点和它所覆盖的节点之间没有其他结,那么进行逆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月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...

  2. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  3. 习题 8-28 打结(Knots, ACM/ICPC ACM/ICPC Jakarta 2012, UVa1624)

    原题链接:https://vjudge.net/problem/UVA-1624 分类:思维题 备注:好题,模拟 实在没有什么明确的思路,一开始想解开绳子变成圆,不会.然后想是不是和奇偶性有关,也找不 ...

  4. yard码 / meter英里 / kilometer 千米/Knots 海里 换算

    最佳答案: 1码(yard)=0.9144米(m) 1米(m)=1.0936132983377码(yard) 英里Miles=1 609米(m) /1 760码(yard) 1 海里(Knots)=1 ...

  5. UVa 1624 打结(Knots)

    略 代码: #include<bits/stdc++.h> #define LL long long #define ms(s) memset(s, 0, sizeof(s)) #defi ...

  6. Knots UVA - 1624

    首先是初始化节点的状态信息,记录每个节点的左节点编号以及右节点标号,然后删除那些没有遮挡别的节点并且没有被别的节点遮挡的节点,然后开始下面的循环删除节点的过程,因为被遮挡以及遮挡其他节点的总数是2*P ...

  7. matlab knots,chronux_2_12.v02 chrounx是matlab的一个工具包(a toolbox for matlab) - 下载 - 搜珍网...

    压缩包 : ef9830f1359cff75ebece428470410dd.zip 列表 chronux_2_12/ chronux_2_12/instructions.txt chronux_2_ ...

  8. c语言gps数据类型,GPS数据格式

    该协议信息包括GGA位置测定系统的定位资料.GSV导航卫星资料.RMC导 航卫星特定精简资料.VTG方向及速度等相关资料.这里以接收GGA数据为例, 给出的格式如下: $GPGGA, hhmmss,d ...

  9. OpenGL编程轻松入门(四)

    1.         曲面和曲线 前面我们讲了如何绘制平面的图形,这一节我们学习如何绘制曲线和曲面. 例10:绘制一个曲面,本程序使用二维求值器绘制一个曲面.本例中也有一些特殊效果的操作. #incl ...

最新文章

  1. mysql5.5数据库操作_命令行下mysql数据库基本操作
  2. Linux安装gitbook
  3. WampServer下如何实现多域名配置
  4. react学习(18)----vs 全局搜索
  5. 今天起,我们喝的百年牛奶要变了!
  6. Python_爬虫_BeautifulSoup网页解析库
  7. 解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题
  8. Keepalived-在没有之前配置的Nginx高可用(不建议采纳)
  9. vue修改数组元素方法
  10. java 计算限行尾号(北京)
  11. ASCll码字符对照表
  12. redis实现CAS
  13. 熟悉继承(java)
  14. 仲裁器设计(4)Weighted Round Robin
  15. Vivado IP核之定点数转为浮点数Floating-point
  16. 【upc】生命曲线(线段树) —— 一个能让你搞懂线段树懒标的题目
  17. mysql 按记录编号_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
  18. 16岁初中生开发的软件,强大到令人发指!
  19. 糟糕!我的服务器CPU被黑客挖矿了
  20. 厦门航空谁让你如此霸王

热门文章

  1. jsp用idea打war包,部署阿里云ecs
  2. 说了那么多,到底什么是「神经搜索」?
  3. 新手站长们看过来:白话ID
  4. MySQL 使用Navicat生成数据字典方法(非常详细)
  5. css 伪元素方法写小圆点
  6. 常见网络编程面试题以及答案(网络面试30题)
  7. 【经典算法】:猴子排序
  8. 16g内存 32g内存游戏区别_32G内存手机到底够用吗?看完泪崩
  9. 【百分百成功】Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005)
  10. 国际研报:腾讯安全天御风控,亚太排名第一