摘要:在纸上画一下可以发现,最终可以加成两部分强连通,然后一部分->另一部分thinking所以就可以利用tarjan来缩点,然后找一个强连通分量使他的入度或者出度为0,可以加到边数为x1*(x1-1)+x2*(x2-1)+x1*x2,减去m就是能加的边选取最大的==-------------------...
阅读全文
摘要:题意比较抽象,说两个集合相等判定是A是B子集且B是A子集,然后给你m个集合关系,表示第一个是第二个的子集,问至少添加多少个关系使所有集合想等把集合想象成点,就变成了:n个点m条有向边,最少加多少条边使只有一个强联通分量思路:先tarjan缩点,然后从出度为0的点向入度为0的点连边,然后其实就是max...
阅读全文
摘要:(男生喜欢特定的女生,女生可以嫁给任何男生=先按题意求出最大匹配,然后在左边增加n-res个虚拟男生喜欢所有女生,m-res个虚拟女生喜欢所有男生,再求最大匹配,这个时候肯定是个完全匹配,求匹配只是确定新的二分图里面每个男生对应的女生是谁=在所有女生女生里面建有向图,将某男生匹配的女生连向所有他喜欢...
阅读全文
摘要:很明显缩完点之后入度为0的点是必须要通知的,也仅需要通知入度为0的点==其实第二个邻接表是不用的,只用统计into数组即可 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 stacks; 7 int Now,H...
阅读全文
摘要:额裸的强连通,判断是不是一个强连通分量== 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 stacks; 7 int Now,dfs_clock,scc_cnt,Head[200005],Next[20000...
阅读全文
摘要:很显然加在缩点后的树直径首尾可以最大限度减少桥的数量==所以就是个无向图tarjan求桥和bfs求树直径裸题了明天继续看TUT 1 #pragma comment(linker,"/STACk:10240000,10240000") 2 #include 3 #include 4 #incl...
阅读全文
摘要:题意需要求出每加一条边求出桥的数目,因为询问数不多,所以可以在tarjan预处理之后在每个询问后面暴力查询lca=和有向图强连通分量差不多,反正都是tarjan搞的TUThdu又需要手动扩栈== 1 #pragma comment(linker,"/STACk:10240000,10240000")...
阅读全文
摘要:本来准备回去了,想想看了一晚上,还是过一个模板题吧==这题比赛时候其实就有思路了,就是将强连通分量缩点成一个DAG,然后判断是否成一条链,会个tarjan就是裸题啊==不说了图论实在太弱,tarjan竟然刚学,放个模板明天继续学图论= 1 #include 2 #include 3 #include...
阅读全文
摘要:首先spfa(思考dijkstra不够==)找一条最短路,若不存在,则n个点都符合。从s进行dfs,找到能到达的最短路上的最远点,这个点就是割点。然后下次以这个为起点dfs,直到找到t。 1 #include 2 #include 3 #include 4 #include 5 #define IN...
阅读全文