
图论
流锡
不想当菜狗捏
展开
-
2021百度之星程序设计大赛初赛二 C 魔怔(欧拉路径)
链接思路:白边肯定是只走一遍的而黑边则是要来回走两遍才行那么我们可以将白边连边,而黑边不管首先看一个连通块的情况那么就是看能不能一遍走完白边,就是一笔画能不能解决的问题那就是欧拉路径了,看是不是只存在度为奇数的点有2个或者为0个并且2个的时候起点要是度为奇数的点那么如果有几个连通块呢这时候黑边就派上用场了我们可以去其他连通块看白边能不能一笔画然后再回来不过这个时候这个连通块的点度数都得是偶数不然没办法走回来的那条边所以度为奇数点只允许有两个并且起点要度为奇数(另一个是终点,最后一原创 2021-08-05 23:53:20 · 184 阅读 · 0 评论 -
2021牛客暑期多校训练营6 C Delete Edges
题目大意:给你n个点的无向完全图(就是每个点都与其他点都连着一条边)问你删多少条边能让边数小于n思路:其实也没啥思路就是知识点的事情(虽然说实话我觉得出的挺偏的一直输出不同组 (x+y+z) mod n = 0(1<=x<=y<=z)的解就好但是这里要注意一个坑点输出的时候用endl会超时(就算关了同步流也会超,我也不知道为啥要改用 \n (并且这时候没关同步流还是可以过的,麻了AC代码:#include <iostream>using namespa原创 2021-08-02 22:25:55 · 150 阅读 · 1 评论 -
CodeChef - ECAPR205
题目大意:给你一张有权有向图然后给你一个起点和一个终点,然后问你从起点到终点的相同长度的最短路有多少条思路:跑两边dij我们建一个数组ans[i]代表到i点有多少条不同的最短路设ans[st]=1 ( st代表起点 )第二遍跑dij的时候看一下dis[y]==dis[x]+w(y代表x指向的点,w代表权值)的情况当是这种情况的时候就说明了有最短路是到这个点的我们就用ans[y]+=ans[x]表示加上了这条最短路的条数之后输出ans[ed]即可AC代码:#include <b原创 2021-07-31 00:40:25 · 119 阅读 · 0 评论 -
Gym - 103118B B - Build Roads
题目大意:给你一个无向有权图每个点到另外一个点的权值是这两个点权值的最大公约数让你把每个点连一遍并花费最小思路:最小生成树就是数据大的时候不太好想因为数据大的时候都能够找到互质的两个点把所有互质的点连上答案就是n-1(除了当L=R的时候)当L=R的时候就是(n-1)× L数据小的时候就按最小生成树的方法建树就好了AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const i原创 2021-07-22 10:37:20 · 220 阅读 · 0 评论 -
UVA10917 Walk Through the Forest(最短路径树)
题目大意:给你m条边与n个点终点是点2,起点是点1当(A,B)中A到终点的最短路径大于B到终点的最短路径的时候你才可以走这两个点问你有多少条路径可以从起点走到终点思路:就是从终点向其他所有点延伸找2到其他所有点的最短路径这样就形成了一个最短路径树我们设一个数组表示每个点能走到起点的路径种类(方便记忆化搜素)把起点的值设为1然后从点2开始按题目给的要求我们向上倒着走最后把数组中点2的值给他加上就好了AC代码:#include <bits/stdc++.h>using原创 2021-06-21 12:45:54 · 193 阅读 · 0 评论