![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 68
chr1st0pher
Dancer on the keyboard
展开
-
Leetcode 1579. 保证图可完全遍历(思维 + 生成树)
DescriptionSolution首先注意到本题中的“完全遍历”概念本质上就是某人能走的边集为原图的一颗生成树故我们可以借鉴生成树算法的思想:避圈法(也就是kruskal的核心思想)再做思考,可删除的边分为两类,一类是某人独有的边,一类是二人共有的若我们删除某人独有的边,在不影响它本身的“完全遍历”性质的前提下,对另一个人的该性质无影响所以我们若要删除尽可能多的边,就应该优先删除独有边,再删除共有边本题一个不可忽视的条件所有元组 (typei, ui, vi) 互不相同该条件说明原创 2021-01-27 02:37:00 · 165 阅读 · 0 评论 -
Leetcode 1691. 堆叠长方体的最大高度(拓扑排序 + DP)
DescriptionSolution一个立方体可以任意翻转, 我们可以当成多个不同的立方体看待。问题转化为:有最多N*6个立方体, 最高能垒多高考虑DP[i], 第i个立方体放在最上面时的最大高度, 发现当前的状态是由所有可以垒在其下面的立方体转移过来的,所以我们考虑一边拓扑排序一边DPCodeclass Solution {public: #define N 202 struct cube{ int a,b,c; }; vector<原创 2020-12-24 23:44:34 · 257 阅读 · 0 评论 -
Leetcode 周赛#220 D. 检查边长度限制的路径是否存在 (并查集+离线)
DescriptionSolution将询问和边集按照边权从小到大排序后, 每次将比当前询问的lim小的边加入并查集中, 再判断此时两点是否连通即可Codeclass Solution {public: #define maxn 100005 int fa[maxn]; int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);} struct node{ int u,v,lim;原创 2020-12-24 10:34:50 · 77 阅读 · 0 评论 -
Leetcode 135. 分发糖果 (拓扑排序)
DescriptionSolution以孩子间的关系建单向边,每个点在拓扑排序中的层数之和即为答案Hint评分相同的孩子需要建双向边Codeclass Solution {public: #define maxn 200005 int d[maxn]; vector<int>edge[maxn]; inline void add(int u,int v) { edge[u].push_back(v); d[v]++;原创 2020-12-24 10:29:28 · 102 阅读 · 1 评论 -
Codeforces 1457D. XOR-gun(二进制+思维)
DescriptionSolution设原始数组为aaa, 设bib_ibi 为aia_iai 的二进制位数若存在一个 iii,满足 bi−1=bi=bi+1b_{i-1} = b_{i} = b_{i+1}bi−1=bi=bi+1,则我们只需要将后两个数异或,得到的数一定比 ai−1a_{i-1}ai−1小(因为最高位变成0了)若这样的 iii 不存在,则原始数组的长度一定不超过 2*30 = 60,我们暴力计算 n≤60n \leq 60n≤60 的情况:最后的答案数组一定存在两原创 2020-11-30 21:54:45 · 184 阅读 · 0 评论 -
2020 ICPC Asia Taipei-Hsinchu Site H. Optimization for UltraNet(二分+最小生成树)
DescriptionSolution首先意识到这是一个最小生成树问题,但需要先满足所选边权值最小值最大,所以我们可以二分这个最小值,再用kruskal来check是否能成树然而最后需要计算任意两点路径上最小边权的和,貌似可以暴力水过去Code#include <bits/stdc++.h>using namespace std;#define pb push_backtypedef long long ll;const ll inf=1e18+10;const int m原创 2020-11-25 21:35:28 · 458 阅读 · 3 评论 -
HDU 4612 边双连通分量缩点 + 树的直径
Problem Description N planets are connected by M bidirectional channels that allow instant transportation. It’s always possible to travel between any two planets through these channels. If we can ...原创 2019-08-06 01:07:42 · 174 阅读 · 0 评论 -
Strongly connected HDU - 4635
SourceDescriptionGive a simple directed graph with N nodes and M edges. Please tell me the maximum number of the edges you can add that the graph is still a simple directed graph. Also, after you ad...原创 2019-06-16 16:25:25 · 255 阅读 · 0 评论 -
ICPC NEAU Programming Contest 2020 K. 关键结点 (最短路 + 割点)
解法:先用最短路求出每个点到点111和点nnn的距离dis1[],dis2[]dis1[], dis2[]dis1[],dis2[];若点u在最短路上则dis1[u]+dis2[u]==dis1[n]dis1[u] + dis2[u] == dis1[n]dis1[u]+dis2[u]==dis1[n]若边(u,v)(u,v)(u,v) 在最短路上则 dis1[u]+w+dis2[v]==dis1[n]dis1[u] + w + dis2[v] == dis1[n]dis1[u]+w+dis2[v].原创 2020-06-09 15:16:59 · 134 阅读 · 0 评论 -
BZOJ2707 [SDOI2012]走迷宫 【期望DP+高斯消元+tarjan缩点】
DescriptionMorenan被困在了一个迷宫里。迷宫可以视为NNN个点MMM条边的有向图,其中Morenan处于起点SSS,迷宫的终点设为TTT。可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点。这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点。若到不了终点,则步数视为无穷大。但你必须想方设法求出Morenan所走步数的期望值。Input第1行4个整数,N,M,S,TN,M,S,TN,M,S,T第[2, M+1]行每行两个原创 2020-06-11 00:23:18 · 862 阅读 · 0 评论 -
HDU 1599 find the mincost route (Floyd 找最小环)
Description杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,…VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。Input第一行是2个整数N和M(N <= 100, M <= 1000),代表景区的个数和道路的条数。接下来的M行里,每行包括3个整数a,b,c.代表原创 2020-09-08 16:04:19 · 90 阅读 · 0 评论 -
Codeforces 459E. Pashmak and Graph (DP)
DescriptionPashmak’s homework is a problem about graphs. Although he always tries to do his homework completely, he can’t solve this problem. As you know, he’s really weak at graph theory; so try to help him in solving the problem.You are given a weighte原创 2020-07-16 17:35:15 · 144 阅读 · 0 评论