UVA-1624-Knots C++版本题解
文章目录
- 题解
- 代码
题目链接
题解
待补充
代码
/** @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++版本题解相关推荐
- UVa 1586 Molar mass 分子量 题解
英文 Description An organic compound is any member of a large class of chemical compounds whose molecu ...
- 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 ...
- HDU2196[树形dp+二次扫描]java和c++版本题解
题目大意:就是给你一颗树,问你从每个点出发能到达的最远距离是多少,第一行输入点的个数nnn,第n−1n-1n−1行是输入两个数x,yx,yx,y,一个是第iii行是第iii个点连接上xxx,距离是yy ...
- Fabled Rooks UVA - 11134(题意+思路+题解)
题目传送门 题目大意: 对于一个n*n的表格,往里面放入n个点,并满足: 每行每列有且只有一个点 (即每两个点之间都不同行,不同列) 每个点都在给定的矩形范围内 (第i个点只能在第i个矩形范围内,且一 ...
- 【UVA 572】Oil Deposits 题解(深度优先搜索)
GeoSurvComp地质调查公司负责探测地下石油矿床. GeoSurvComp一次处理一个大的矩形土地区域,并创建一个划分 将土地分割成许多方形地块.然后使用传感设备分别分析每个地块 确定图中是否含 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- UVa 1225 Digit Counting 题解
英文 Description Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts w ...
- 控制for each循环次数_CCF CSP编程题解201312-1:出现次数最多的数
试题编号:201312-1 试题名称:出现次数最多的数 时间限制:1.0s 内存限制:256.0MB 问题描述: 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. ...
最新文章
- latex 公式转图片
- #翻译# 关于 Java 性能方面的 9 个谬论
- CF 2B.The least round way
- formcheck 自定义验证
- 2019-03-5-算法-进化(最长公共前缀)
- __str__是什么函数_PHP str_shuffle()函数与示例
- 华硕和梅林系统哪个好_RUSHCRM:定制CRM软件系统哪个好?
- 你不了解PHP的10件事情!
- 曾陷“数据风暴”危机的赛默飞世尔如何化险为夷的?
- scala学习-Linux命令行运行jar包传入main方法参数
- Unity+SenseAR教程:用手势发射爱心【源码】
- Python使用傅里叶变换调整音频文件音量
- vue中将axios封装
- 适用于ActiveX v18.6 x86的Codejock Xtreme Suite Pro
- 细说php第四版笔记,细说PHP 学习笔记(二)
- 三菱Q系列ST、结构化编程、QD77定位以及转矩模式切换案例
- MATLAB 线型图
- 中华石杉-- --分布式服务框架Dubbo的笔记
- 记一次 “HTTP 405 Method Not Allowed”的解决方法
- 怎么保存python制作的饼图_Scribus中的Python脚本:制作饼图