合集-图论

摘要:原题链接 题解 我们令 a出现在b前面 建立一条a到b的有向边 如果有强连通分量,那么no 每张截图除了第一个人,其余人均按相对位置排序 这道题就变成了给定若干个相对位置,求是否存在可能的绝对位置 我们可以建图,作拓扑排序,一个节点能被遍历到当且仅当其所有的父节点都被遍历到 当且仅当 阅读全文
posted @ 2024-02-19 21:12 纯粹的 阅读(34) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.暴力模拟 对每条边枚举(枚举之前先对边排序),然后对除去枚举边之外的边做并查集 code1: #include<bits/stdc++.h> using namespace std; struct unit { int x,y; }edge[5005]; bool cmp(uni 阅读全文
posted @ 2024-02-22 18:58 纯粹的 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 一个节点的答案一定是最大父节点+1 code #include<bits/stdc++.h> using namespace std; int ans[100005]={0}; int in[100005]={0}; vector<int> G[100005]; struct uni 阅读全文
posted @ 2024-02-24 13:09 纯粹的 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 好抽象啊!!! 大概思路就是把强连通分量看作一个点,然后在此基础上找入度为零的点 code #include<bits/stdc++.h> using namespace std; vector<int> G[205]; int in[205]={0};//代表强连通分量的入度 in 阅读全文
posted @ 2024-02-24 17:28 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解,请看题解区第一篇,看一遍就会了 code #include<bits/stdc++.h> using namespace std; int fa[400005]={0}; int finds(int now) { return fa[now]=(fa[now]==now?now:fi 阅读全文
posted @ 2024-02-24 18:27 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 先说结论 对单个图做深度搜索树,对于树的根节点,它要能是割点当且仅当她有至少两个不互通的儿子节点 对于树的非叶子非根节点,它要能是割点当且仅当存在儿子节点能去的时间戳最小的节点不小于当前节点的深度搜索序 对于叶子节点, 不可能成为割点 code #include<bits/stdc+ 阅读全文
posted @ 2024-02-24 22:54 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 唯一能解释的图片,黄色代表会执行入栈操作的点 code #include<bits/stdc++.h> using namespace std; int vis[500005]={0}; int low[500005]={0}; stack<int> q; vector<int> a 阅读全文
posted @ 2024-02-25 17:13 纯粹的 阅读(30) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 和点双连通分量不同在于 点双联通分量:分量内任意两点之间至少有两条独立路径可走,两条路径所经过的点除了起点和终点都不同 边双连通分量:分量内任意两点之间至少有两条独立路径可走,两条路径所经过的边都不同(包括重边) 用这个图依然可以解释 code #include<bits/stdc+ 阅读全文
posted @ 2024-02-25 17:55 纯粹的 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 首先,题目确保这是一个图 那么我们进行缩点,把边双连通分量的点缩点,然后统计叶子节点,也就是连接数为1的节点 要注意有重边的存在,那么我是怎么处理的呢?把两点之间的直接边只能出现一次,那我就作二维数组统计 code #include<bits/stdc++.h> using name 阅读全文
posted @ 2024-02-25 20:23 纯粹的 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 非常抽象的缩点 大概思路:搜索缩点成有向图,求该点的入度和出度,最后答案一定是 max(in,out) 总之很抽象 code #define ll long long #include<bits/stdc++.h> using namespace std; inline vo 阅读全文
posted @ 2024-02-26 22:50 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 核心技巧:两次搜索 第一次搜索: 搜索出 f[now][i]now 为根节点的子树且距离根节点恰好为 i 的节点的个数 搜索完了之后,把范围 k 以内的累加 第二次搜索: 由于整棵树的根节点的 f 等于整棵树里距离不大于 k 的节 阅读全文
posted @ 2024-03-04 17:56 纯粹的 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 二分图匹配,总的来说就是如果我的位子没人霸占,那我就坐,如果没人霸占,那我尝试着让他滚蛋 如果一个位子经历过两次滚蛋,说明别人确实没位子坐了,人家确实需要这个位子,那我就换一个位子 code #include<bits/stdc++.h> using namespace std; i 阅读全文
posted @ 2024-03-06 21:19 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 思维转换,想象井里的水都来自山上,并把山看成一个点,那么这道题就变成了最小生成树 简证最小生成树原理: 按边权排序,然后遍历,如果这条边的两个点之前每连过,那么就连上,因为这就是这两个点所在集合之间的最短路径了,不然这条边没必要加,因为已经联通了 算是一种贪心? code #incl 阅读全文
posted @ 2024-03-06 23:09 纯粹的 阅读(69) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 最小生成树和最短路不一样的兄弟 code #include<bits/stdc++.h> using namespace std; int fa[306]={0}; int finds(int now){return (fa[now]==now?now:finds(fa[now])) 阅读全文
posted @ 2024-03-06 23:25 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解1: 按边权从大到小排序,如果这条边的两个点没确定关系,那么把他们设为敌人 这样,就成了一棵棵最大生成树(因为有的罪犯之间没有怨气) 由敌人的敌人是朋友可以得出,如果两个点在同一棵树,且距离为偶数,那么代表他们之间互为朋友 code1 #include<bits/stdc++.h> u 阅读全文
posted @ 2024-03-07 18:41 纯粹的 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解1:朴素广搜 注意细节 code1 #include<bits/stdc++.h> using namespace std; int poi[4]={-3,1,-1,3}; int main() { string s; cin>>s; queue<string> q; map<stri 阅读全文
posted @ 2024-03-07 20:05 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 把奶牛看成点,赠送列表关系看成有向边,这样这道题就成了对强连通分量缩点,然后找出这个新图中入度为零的点有几个,出度为零的点有几个 code #include<bits/stdc++.h> using namespace std; vector<int> G[105]; int len 阅读全文
posted @ 2024-03-08 12:21 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 抽象化 抽象成点和边,对于抹除一个点,判断整个图是否联通 等价于建立一个点(被抹除点的前一个点),判断这个点与周围点相连后,累积合并次数是否等于点数减一 code #define ll long long #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2024-03-08 14:26 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解,终于有一道题一遍过了 强连通分量缩点加本题个性化判断 code #include<bits/stdc++.h> using namespace std; vector<int> G[10005]; int order[10005]={0},low[10005]={0},len=0; 阅读全文
posted @ 2024-03-08 15:04 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 这种让来让去让我想到了二分图!! 注意细节!!剩余的就是模拟了 code #include<bits/stdc++.h> using namespace std; int stu[55],gohome[55],know[55][55]; int n; int belong[55]={ 阅读全文
posted @ 2024-03-08 15:48 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示