一.算法
1.一笔画问题
2.拓扑排序
3.最小生成树
4.最短路径
5.有向图的强连通分量
6.无向图的双连通分量、割点与桥
二.题目
混合图
你有一个混合图,它有n 个顶点,m 条边,其中a 条是有向边,b条是无向边。现在要求为这b 条无向边确定一个方向,使得最后的有向图上不存在环。
1 ≤ n, a, b ≤ 105, m = a + b。
不用考虑无解的情况。
输出两个数u,v表示无向边(u,v)方向为由u指向v。
输入:
8 8 2
1 2
1 3
2 3
3 7
7 8
2 4
4 5
4 6
1 3
2 7
输出:
1 3
2 7
1 |
|
题解:
既然要求最后的有向图没有环,也就是要求最后是个DAG。
DAG 进行拓扑排序后边的方向都是拓扑序小的连向拓扑序大的。
先把无向边忽略,对图进行拓扑排序,最后无向边的方向就是拓扑
序小的连向拓扑序大的。
灾后重建
1 |
|
这道题刷新了我对floyd算法的看法,原来它还可以这样用。。。
这道题核心只有一句话:因为每一个村庄建好的时间和询问保证时间是不下降的,所以每一个村庄重建好,就用当前建好的村庄更新dis,然后输出。
chess
1 |
|
[poj3159] candies
差分约束。。。
1 |
|
飞行路线
1 |
|
这道题卡spfa,qwq.我的spfa只拿了90分,一个数据点RE,改为dijkstra之后快了一倍。
但由于我选择在dijkstra枚举k,来更新答案所以一个点许多次出现。所以vis[]需要记录一个点出现的次数。
最坏情况下,一个点需要更新n个点,所以vis[i]==n时continue;
其实还可以将一个点分为n*k+1个点,用(i,k)表示,每次更新(n,k+1)和(n,k);
以下引用大佬代码:
出处:
1 |
|
链接之前的博客(里面有这道题的分层图代码)
本文作者:
syrsteven
最后更新: 2023年09月02日 04:06:21
本文链接: http://syrsteven.github.io/post/10f14ed7.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!
最后更新: 2023年09月02日 04:06:21
本文链接: http://syrsteven.github.io/post/10f14ed7.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!