随笔分类 - 图论
摘要:P2296 寻找道路路径上的所有点的出边所指向的点都直接或间接与终点连通。题中的这个条件很难受,操作是,反向建边,然后从终点bfs,然后把能走到的点设成true。然后把false的点按反向边扩展一层,把扩展到的点卡掉。然后正向bfs就好了,小心“图G 中可能存在重边和自环,题目保证终点没有出边。”;
阅读全文
摘要:P1821 [USACO07FEB]银牛派对Silver Cow Party我当时看着邻接矩阵存的下,就想来一发floyed,然后发现了很多问题。floyed的判定条件非常严格,否则会挂。初始化为inf if(d[i][k]+d[k][j]<d[i][j]&&d[i][k]!=inf&&d[k][j
阅读全文
摘要:P3905 道路重建我一开始想错了,我的是类似kruskal,把毁坏的边从小到大加,并且判断联通性。但是这有一个问题,你可能会多加,就是这条边没用,但是它比较小,你也加上了。居然还有10分,数据也是水水的。。。 正解是把未坏的边的权值设成0,坏的边的值不变,跑spfa即可。
阅读全文
摘要:在队列中,q.empty()比q.size()要慢,如果可能就用q.size(); 比如spfa的 while(q.size()>0) better than while(!q.empty())
阅读全文
摘要:P1113 杂务 这道题我爆0啦,有点dp的小味道,显然,一个工程的完成时间由最慢的人决定(可以同时进行),m[i]代表完成杂物i所需的最少时间,m[i]=max(m[i],m[j]+v[i]),j是需要在i之前完成的杂物,最慢的也要完成,所以要取最大。虽然题目中说准备工作只可能在杂务1..k-1中
阅读全文
摘要:P2784 化学1(chem1)- 化学合成 还是spfa,距离数组初始化为-1,松弛操作改为*就好了,一开始老是超时,后来加了一个visit数组就过了,这个重复造成的效率浪费还是蛮大的,以后都要加。
阅读全文
摘要:对图的新认识 对于任意的一个图,图中所有点的度数之和为边数*2,在图中每走一次,有三种情况 1.奇点数没变(一种是真没变,一种原奇点减少一个,又新添了一个奇点) 2.奇点数增加2 3.奇点数减少2 连通图中奇点个数一定为偶数,证明如下: 我们来模拟建图的过程 1.一开始所有点都是0,显然偶数 2.加
阅读全文
摘要:一笔画问题 相关概念简介: 奇点:与它相连的边的个数为奇数的点;偶点同理。 1.如果图中没有奇点,则从任意点开始走,最后也一定会回到该点; 2.如果图中有2个奇点,则从两个奇点中任意点开始走,最后一定会回到另一个奇点; 3.其他情况一定不能完成一笔画问题 证明: 对于图中经过点,每经过一次与它相连的
阅读全文
摘要:洛谷P1396 营救 多种解法: 1.spfa,只是松弛操作时更新的是路径上最大值的最小值;(最慢。。24ms) 2.Kruskal 从小到大加边,直到getfather(s)==getfather(t),然后输出当前边权;(最快。。4ms) 3.Bfs+二分答案,二分出来mid,然后用边权小于mi
阅读全文
摘要:Kruskal算法证明 易证,对于一个无向加权连通图,总是存在一棵或以上的有限课生成树,而这些生成树中肯定存在至少一棵最小生成树。下面证明Kruskal算法构造的生成树是这些最小生成树中的一棵。 设T为Kruskal算法构造出的生成树,U是G的最小生成树。如果T==U那么证明结束。如果T != U,
阅读全文
摘要://拓扑排序 #include using namespace std; queueq; int n,m; int in[1000]; bool b[1001]; struct node { int n; node *next; }*e[1000]; int main() { cin>>n>>m; node *p; int x; for(int ...
阅读全文

浙公网安备 33010602011771号