图论
文章平均质量分 79
AlanXWu
这个作者很懒,什么都没留下…
展开
-
强联通tarjan
procedure Tarjan(u:longint);beginnum:=num+1;dfn[u]:=num;low[u]:=num;inc(top);st[top]:=u;i:=head[u];while i<>0 do begin v:=vet[i]; if dfn[v]>0 then begin begin ...原创 2018-07-29 20:16:50 · 189 阅读 · 0 评论 -
明星奶牛
tarjan缩点,有且只有一个点出度为0,则ans=点中元素个数,否则ans=0tarjan一次就可以找出最大强联通分量最后的for i:=1 to co do if d[i]=0 then begin inc(ans,count[i]);inc(u);end;易写错成for i:=1 to co do if d[color[i]]=0 then begin inc(ans,count...原创 2018-07-30 08:15:54 · 378 阅读 · 0 评论 -
间谍网络
算最小编号时的更优做法是以cost<>maxlongint为起点再进行一次tarjan,未被搜到的(dfn=0)即不能被收买的间谍 搜到附代码:var n,m,i,ii,u,v,j,k,l,x,y,a,b,tot,num,top,co,p,ans,anss:longint;head,next,vet,color,st,dfn,low,cost,pay,d,minn:arr...原创 2018-07-30 09:17:48 · 307 阅读 · 0 评论 -
这不是floyd
tarjan缩点,同一个强联通分量中,元素只有一个就不需要连边,否则就连成一个环,ans+=元素个数处理强联通分量直接连边有点麻烦,先把所有的边都连上,并记录连边的出发点和终点(l[num],r[num]),ans+=num用p[i][j]来记录强联通分量i到j的走法总数,用floyd计算,p[i][j]+=p[i][k]*p[k][j] (>0),然后再枚举每一条连着的边,看能否删...原创 2018-07-30 11:20:14 · 184 阅读 · 0 评论 -
匿年龄分组
题目简述: BSNY所在的城市有N个人,每个人的年龄未知。已知M对人之间的年龄大小,用ai, bi表示编号ai的人的年龄不小于编号bi人的年龄。为了让年龄更加隐匿,BSNY想把这N个人分成若干组,每组内的成员相互不能比较出年龄大小。现在BSNY想知道,要达到上述要求,至少分多少组?例如N=4, M=4。M对关系如下:1不小于2,1不小于3,2不小于4,3不小于4至少分3组...原创 2018-07-30 15:55:30 · 236 阅读 · 0 评论 -
割点,桥,双连通
计算割点和桥数的模板:(基本上和强连通的tarjan算法一样)var n,m,i,j,k,l,num,top,tot,co,ii,x,y,u,v,count,ans,cutedge,root:longint;head,next,vet,low,dfn,color,d:array[0..400005] of longint;visit,st,cut:array[0..400005] of...原创 2018-07-30 20:58:12 · 149 阅读 · 0 评论 -
矿产搭建
在错误十一次后终于对了高兴的附代码:const maxx=100005;var o,root,u,v,x,y,n,m,i,j,k,l,tot,num,top,flag,co:longint;ans,anss:int64;dfn,low,head,next,vet,st,count,cutd:array[0..100005] of int64;cut:array[0..100...原创 2018-08-02 23:10:15 · 175 阅读 · 0 评论