[Poi2012]Tour de Byteotia 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3060 题解: 这类题有一个套路,就是他不要求的点可以随便搞. 我们只需要保证前$k$个点是对的就行. 因此,如果一条边的有至少一个是关键点的端点,我们设当前边是关键边. 有结论:只删关键边一定是最优的. 然后枚举就行了. 代码: #include <bits/stdc++.h> #define N 1000010 using nam…
[BZOJ3060][Poi2012]Tour de Byteotia Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Input        第一行三个整数n,m,k:        接下来m行每行两个整数ai,bi,表示ai和bi之间有一条无向边. Output        一个整数,表示最少的删边数量. Sample Input 11 13 5 1 2 1 3 1 5 3 5 2 8 4 11 7 11 6 10 6 9 2…
前 $k$ 个节点形成的结构必定是森林,而 $[k+1,r]$ 之间肯定是都连上,而剩下的一个在 $[1,k],$一个在 $[k+1,r]$ 的节点就能连多少连多少即可. Code: #include <bits/stdc++.h> #define N 1000005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; struct Edge { int u,v; }e[N<…
3060: [Poi2012]Tour de Byteotia Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 251  Solved: 161 Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Input        第一行三个整数n,m,k:        接下来m行每行两个整数ai,bi,表示ai和bi之间有一条无向边. Output          一个整数,表示最少的删边数量…
[POI2012]Tour de Bajtocja 题目大意: 给定一个\(n(n\le10^6)\)个点\(m(m\le2\times10^6)\)条边的无向图,问最少删掉多少条边能使得编号小于等于\(k\)的点都不在环上,并输出任意一种删边方案. 思路: 首先若一条边两端都\(>k\),那么加上这条边对答案没有影响(就是说由它构成的环上如果有端点\(\le k\)的边,删掉后者不会更差). 因此我们可以先将所有两端点都\(>k\)的边加上.对于有端点\(\le k\)的边,我们依次将它们加…
Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Analysis 包含关键点的环中 包含从关键点连出的两条边 考虑我们删边删哪些边更优 根据贪心 我们会删与关键点相连的边 一直删我们发现不会删掉不与关键点相连的边 Solution 于是我们先把边顶点都大于k的先连起来 相当于合并了一些点 在新的图里,每个连通块里都不能生成环 那最多保留一棵生成树 Solution #include <cstdio> #include <cst…
传送门 毒瘤细节题. 首先考虑不合法的情况. 先把相同的值配对,这样就构成了一些区间. 那么如果这些区间有相交的话,就不合法了. 如何判断?DZYO安利了一波st表,我觉得很不错. 接着考虑两个相同的值,它们中间一定只有奇数个数. 然后剩下不合法的情况可以在接下来处理时判断. 接下来还原序列的问题是可以拆分成子问题的. 考虑这两个相同的值夹住的区间. 显然这个区间里是没有值相同的. 对于区间里两个相邻且不全为0的数. 如果是形如0xy0xy0xy的话,我们把0改成y可以变成一个可行解yxyyxy…
[[POI2012]TOU-Tour de Byteotia] 洛谷P3535 https://www.luogu.org/problemnew/show/P3535 JDOJ 2193旅游景点(同类题目) https://neooj.com/oldoj/problem.php?id=2193 知识点:并查集判环 ps:首先声明一下,这题我只得了20分,但是检查了好多遍代码发现没有问题,看了大佬的题解发现他也得了20分,那就是洛谷数据点有问题了(数据范围啥的都没给还想过?) 所以大家不要纠结分数…
想不到这还可以用并查集解,不过后来证明确实可以…… 题意也有些难理解—— 给你一个锁,这个所由n个字母组成,然后这个锁有m个区间,每次可以对一个区间进行操作,并且区间中的所有字母要同时操作.每次操作可以将区间中所有字母+1.即把a变成b,把z变成a. 举个例子,比如有一个锁,由abcdef组成,前三个字母abc是一个区间,第四五个字母de是一个区间,那么如果对abc操作一次,则获得新锁bcddef,再对de区间操作一次,得bcdeff.但是,最后一个字母f是不能操作的. 如果一把锁通过对可操作区…
题意:给定每一点离他最远的点,问是这个森林里有多少棵树. 析:并查集,最后统计不同根结点的数目即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include &…