摘要:
1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,m,ntime;//ntime记录dfs访问时间 8 int instack[11000];//标记点是否在栈中 9 int dfn[11000];//节点在dfs过程中的访问序号(也可以叫做开始时间) 10... 阅读全文
摘要:
1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 vector > g; 7 int dfn[11000];//节点在dfs过程中的访问序号(也可以叫做开始时间) 8 int low[11000];//节点的子树中能够通过非父子边追溯到的最早的节点的dfs开始时间 9 int fa[1100... 阅读全文
摘要:
floyd最外层的k循环在循环到某个数ki时,前面以0到ki-1为中间结点的最短路径已经求出。 所有在内层的双循环之前再用一个双循环记录已找到的最小环的值即可。 要开两个数组存图,一个图就表示原图,不能改变值,另一个用来记录最短路。 阅读全文
摘要:
也没啥好讲的。字符串模拟出图后直接floyd,水题+1。 阅读全文
摘要:
没啥好讲的,直接构图就是。 阅读全文
摘要:
有一片100*100的湖泊,中心坐标(0,0),即湖泊右上角的坐标是(50,50),湖泊中间有一片以(0,0)为圆心,15为直径的圆形陆地。现有一个人在陆地,湖泊中散布着一些点可以踩,这个人要利用这些点跳到岸上,求最短路径和最短路径下的最短步数。 spfa莫名其妙的超时,dij+堆优化反而能过。。。 阅读全文
摘要:
n个人分成m组,求人数最多的那一组人数的最小值。 每个人肯定只能匹配一个组,但一个组可以匹配多个人,因此属于多重匹配。 我们设置一个limit,表示每组最多能容纳的人数。在dfs(u)寻找u的匹配时,如果某一组vv的人数小于limit,那么可以把u和vv匹配,vv已经匹配的人数+1。否则,当人数已经 阅读全文
摘要:
题意很简单,显然是对客人与伞做匹配,求最大匹配数。 一开始用了匈牙利,果断TLE。。。 好吧,原来二分匹配还有这个奇葩算法。。然而敲完还是不明白这个算法啥意思。。。 附两个算法的时间复杂度: 匈牙利:O(VE) H-K :O(V^0.5 E) 阅读全文
摘要:
有一个展厅,里面有一些文物和守卫,现在守卫不够,需要再雇佣一些守卫使所有文物被保护,且雇佣数量要最少,求这个数量。 文物被保护的定义:这个文物的所有必须被保护的点都要有守卫。 一个文物由一个2的12次方以内的数表示,那么这个数最多有12位,对应图中给出打的12个可能要被保护的点。 从末位(i=0 t 阅读全文
摘要:
n个点,m条边,边分为A,B两类,要构造一棵最小生成树,且树中A边数量为k。 我们可以通过给所有A边加上权值dx来控制树中A边的数量。显然,当dx增大,A边数量kk会减少。 二分dx, 当kk>=k,增大dx(即l=mid+1),同时更新ans=sum(mst)-mid*k; 当kk<k,减小dx( 阅读全文