文章目录

  • 题解
  • 代码

题目链接

题解

待补充

代码

/** @Date: 2021-12-07 17:51:55* @LastEditors: fuchaoxin* @LastEditTime: 2021-12-08 12:21:53* @FilePath: \Visual Studio\c++\Knots.cpp*/#include <bits/stdc++.h>
using namespace std;struct Node
{int pre, next;
} node_list[1000001];int deleteNode(int index, int ud[])
{ud[index] = 0;node_list[node_list[index].pre].next = node_list[index].next;node_list[node_list[index].next].pre = node_list[index].pre;return node_list[index].next;
}int main(void)
{int T;scanf("%d", &T);int index = 1;while (T-- > 0){// initializeint L, P;scanf("%d %d", &L, &P);int link[L], ud[L], visited[L];memset(ud, 0, sizeof(ud));memset(link, 0, sizeof(link));memset(visited, 0, sizeof(visited));// construct the link and the udfor (int i = 0; i < P; i++){int upper, lower;scanf("%d %d", &upper, &lower);link[upper] = lower;link[lower] = upper;ud[upper] = +1;ud[lower] = -1;}// construct the node_listfor (int i = 0; i < L; i++){node_list[i].pre = i - 1;node_list[i].next = i + 1;}// modifynode_list[0].pre = L - 1;  // it should not be -1, it's L - 1node_list[L - 1].next = 0; // it shoud not be L, it's 0// delete empty nodesfor (int i = 0; i < L; i++){if (ud[i] == 0){deleteNode(i, ud);}}// find the startNodeint startNode = 0;while (ud[startNode] == 0){startNode++;}// solve knotsint tag = 1;while (P > 0){bool flag = false;for (int i = startNode; visited[i] != tag; i = node_list[i].next){if (flag){break;}int node1 = i;int node2 = node_list[node1].next;// int node3 = link[node1];// int node4 = link[node2];visited[node1] = tag;if (link[node1] == node2 || link[node2] == node1){// self loopstartNode = deleteNode(node1, ud);startNode = deleteNode(node2, ud);tag++;P--;flag = true;}else if (ud[node1] == ud[node2] && (node_list[link[node1]].next == link[node2] || node_list[link[node2]].next == link[node1])){// passingstartNode = deleteNode(node1, ud);startNode = deleteNode(node2, ud);startNode = deleteNode(link[node1], ud);startNode = deleteNode(link[node2], ud);tag++;P -= 2;flag = true;}}if (!flag) // avoid useless loop{break;}}// System.outif (P == 0){printf("Case #%d: YES\n", index);}else{printf("Case #%d: NO\n", index);}index++;}return 0;
}

UVA-1624-Knots C++版本题解相关推荐

  1. UVa 1586 Molar mass 分子量 题解

    英文 Description An organic compound is any member of a large class of chemical compounds whose molecu ...

  2. UVa 1624 打结(Knots)

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

  3. Knots UVA - 1624

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

  4. HDU2196[树形dp+二次扫描]java和c++版本题解

    题目大意:就是给你一颗树,问你从每个点出发能到达的最远距离是多少,第一行输入点的个数nnn,第n−1n-1n−1行是输入两个数x,yx,yx,y,一个是第iii行是第iii个点连接上xxx,距离是yy ...

  5. Fabled Rooks UVA - 11134(题意+思路+题解)

    题目传送门 题目大意: 对于一个n*n的表格,往里面放入n个点,并满足: 每行每列有且只有一个点 (即每两个点之间都不同行,不同列) 每个点都在给定的矩形范围内 (第i个点只能在第i个矩形范围内,且一 ...

  6. 【UVA 572】Oil Deposits 题解(深度优先搜索)

    GeoSurvComp地质调查公司负责探测地下石油矿床. GeoSurvComp一次处理一个大的矩形土地区域,并创建一个划分 将土地分割成许多方形地块.然后使用传感设备分别分析每个地块 确定图中是否含 ...

  7. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  8. UVa 1225 Digit Counting 题解

    英文 Description Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts w ...

  9. 控制for each循环次数_CCF CSP编程题解201312-1:出现次数最多的数

    试题编号:201312-1 试题名称:出现次数最多的数 时间限制:1.0s 内存限制:256.0MB 问题描述: 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. ...

最新文章

  1. latex 公式转图片
  2. #翻译# 关于 Java 性能方面的 9 个谬论
  3. CF 2B.The least round way
  4. formcheck 自定义验证
  5. 2019-03-5-算法-进化(最长公共前缀)
  6. __str__是什么函数_PHP str_shuffle()函数与示例
  7. 华硕和梅林系统哪个好_RUSHCRM:定制CRM软件系统哪个好?
  8. 你不了解PHP的10件事情!
  9. 曾陷“数据风暴”危机的赛默飞世尔如何化险为夷的?
  10. scala学习-Linux命令行运行jar包传入main方法参数
  11. Unity+SenseAR教程:用手势发射爱心【源码】
  12. Python使用傅里叶变换调整音频文件音量
  13. vue中将axios封装
  14. 适用于ActiveX v18.6 x86的Codejock Xtreme Suite Pro
  15. 细说php第四版笔记,细说PHP 学习笔记(二)
  16. 三菱Q系列ST、结构化编程、QD77定位以及转矩模式切换案例
  17. MATLAB 线型图
  18. 中华石杉-- --分布式服务框架Dubbo的笔记
  19. 记一次 “HTTP 405 Method Not Allowed”的解决方法
  20. 怎么保存python制作的饼图_Scribus中的Python脚本:制作饼图

热门文章

  1. 利用1433端口及提权总结
  2. s[0]-‘0‘是什么意思
  3. Java实现文件监控器FileMonitor
  4. 未能加载文件或程序集一例
  5. spring+shiro+cas实现单点登录,登出
  6. PAT1082 射击比赛
  7. 如何批量提取文件名?
  8. 织梦手机端生成静态页面实操
  9. 牛客网算法错题笔记总结
  10. 国培计算机应用培训心得,计算机应用技术国培研修心得体会