题意:给定一个带权有向图,求点数最小的负环。

2 ⩽ n ⩽ 300
0 ⩽ m ⩽ n(n - 1)
1 ⩽ ui,vi ⩽ n
abs(w[j])<= 10^4

思路:倍增思想

设d[i,j,k]为走不多于2^i次步,从j走到k的最小权值和

显然d[i]可以由d[i-1]推出

f[i,j]表示当前走若干步后从i到j的最小权值和

从大到小枚举在原来的基础上再走不多于2^i步的结果

如果有负环就不用再走2^i步,将f复原

否则将j更新为走2^i步之后的数值,继续枚举

 const oo=;
var d:array[..,..,..]of longint;
g,f:array[..,..]of longint;
n,m,i,j,k,t,ans,x,y,z:longint;
flag:boolean; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; begin
assign(input,'cycle.in'); reset(input);
assign(output,'cycle.out'); rewrite(output);
readln(n,m);
for i:= to n do
for j:= to n do
if i<>j then d[,i,j]:=oo;
for i:= to m do
begin
readln(x,y,z);
d[,x,y]:=min(d[,x,y],z);
end;
for t:= to do
begin
for i:= to n do
for j:= to n do
if i<>j then d[t,i,j]:=oo;
for i:= to n do
for j:= to n do
for k:= to n do d[t,i,k]:=min(d[t,i,k],d[t-,i,j]+d[t-,j,k]);
end;
for i:= to n do
for j:= to n do
if i<>j then f[i,j]:=oo;
for t:= downto do
begin
for i:= to n do
for j:= to n do g[i,j]:=f[i,j];
for i:= to n do
for j:= to n do
for k:= to n do f[i,k]:=min(f[i,k],g[i,j]+d[t,j,k]);
flag:=false;
for i:= to n do
if f[i,i]< then begin flag:=true; break; end;
if flag then
begin
for i:= to n do
for j:= to n do f[i,j]:=g[i,j];
end
else ans:=ans+(<<t);
end;
inc(ans);
if ans>n then writeln()
else writeln(ans); close(input);
close(output);
end.

【ZJOI2017 Round1练习&BZOJ4773】D3T1 cycle(最小负环,倍增)的更多相关文章

  1. 【ZJOI2017 Round1后记】

    2017.4.1: NOIP+Round1综合成绩出来,标准分离续命线差了80分,果然还是联赛坑挖太大了…… 不管怎么说能续命的话还是要试一下的…… 发毒誓:Round2前不打手游,不看NGA,不看星 ...

  2. 【ZJOI2017 Round1练习&BZOJ4765】D1T3 普通计算姬(主席树,分块)

    题意: 思路:分块 使用树状数组维护sum[i]的前缀和 使用主席树维护root到u的路径上点的编号出现的个数 每次操作如果是修改就加入队列 如果是询问,考虑块内操作对询问的影响,每次在x点加上y会使 ...

  3. 【ZJOI2017 Round1练习】D2T2 iqtest(排列组合)

    题意: 思路: 根据欧拉定理,a^(phi(n)-1)为a mod n的逆元 ..]of longint; s,ans,x,mo,k,phi,tmp:int64; i,m,n,j:longint; f ...

  4. 【ZJOI2017 Round1练习】D2T1 river(二分图)

    题意: 思路:这道题并没有官方题解 没有羊驼在所有三元组中出现就是NO 现在考虑不少于1只的情况 删去其中一只,我们得到了两组点和一些边 我们只要判断这是否为一张二分图,使用暴力染色的方法就有60分了 ...

  5. 【ZJOI2017 Round1练习】D2T3 counter(线段树)

    题意: 思路: 预处理出b[i]代表i位置之前比a[i]小的数的个数 以每个数为结尾的组数是线段树中(1,a[i]-1) 对于a[i]换到最后,相当于线段树中(a[i]+1,n)-- 交换后b[i]又 ...

  6. 【ZJOI2017 Round1练习&BZOJ4767】D1T3 两双手(排列组合,DP)

    题意: 100%的数据:|Ax|,|Ay|,|Bx|,|By| <= 500, 0 <= n,Ex,Ey <= 500 思路:听说这是一道原题 只能往右或者下走一步且有禁止点的简化版 ...

  7. 【ZJOI2017 Round1练习&BZOJ4766】D1T2 文艺计算姬(Prufer编码)

    题意:给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图K_{n,m},求其生成树个数 mod p. 100%的数据:1 <= n,m,p <= 10^18 思路:这是 ...

  8. 【ZJOI2017 Round1练习】

    喜闻乐见(爆蛋滚粗)的ZJOI模拟赛终于开始了 可以又一次感受被屠的快感 DAY1: T1:线段树打错-70 正解分块听卡常还要调块的大小 T2:数学弱爆 是道结论题 T3:暴力分滚粗 DAY2: T ...

  9. 【ZJOI2017 Round1练习】D4T2 trie(贪心,状压DP)

    题意:现在 Matej 手上有 N 个英文小写字母组成的单词, 他想知道,如果将这 N 个单词中的字母分别进行重新排列,形成的字母树的节点数最少是多少. n<=16,len[i]<=100 ...

随机推荐

  1. Nuget 自定义配置(官网)

    <?xml version="1.0" encoding="utf-8"?> <configuration> <config> ...

  2. jmeter(十四)解读聚合报告

    一个每天1000万PV的网站需要什么样的性能去支撑呢?继续上一篇,下面我们就来计算一下,前面我们已经搞到了一票数据,但是这些数据的意义还没有说.技术是为业务服务的,下面就来说说怎么让些数据变得有意义. ...

  3. jquery + ajax 实现多条件查询

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="JquerySort.aspx. ...

  4. JS filters-table简单过滤-Version 1

    初级版本: 输入框可检索,空格检索忽略 radio点击后会过滤 最后的两个输入框可根据age范围检索过滤 三个单独的功能,不能协同工作 <!DOCTYPE html> <html&g ...

  5. Objective-C Properties

    Objective-C Properties Apple introduced properties, a combination of new compiler directivesand a ne ...

  6. iOS programming UITabBarController

    iOS programming UITabBarController 1.1 View controllers become more interesting when the user's acti ...

  7. 重构26-Remove Double Negative(去掉双重否定)

    尽管我在很多代码中发现了这种严重降低可读性并往往传达错误意图的坏味道,但这种重构本身还是很容易实现的.这种毁灭性的代码所基于的假设导致了错误的代码编写习惯,并最终导致bug.如下例所示: public ...

  8. servlet 生命周期 与 初始化

    一. 生命周期 Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service() 方法来处理客户端的请求. Servlet 通过调用 destroy() 方法终止( ...

  9. 在PetaPoco中使用Where in

    之前一直没在意,今天查了很多资料,才知道在petapoco中使用in关键字需要使用命名参数,否则是无效的(或者只查出第一个条件的记录),示例如下: var tags= new string[]{“c1 ...

  10. CAD使用GetAllAppName读所有名称(com接口)

    主要用到函数说明: MxDrawEntity::GetAllAppName 得到所有扩展数据名称,详细说明如下: 参数 说明 [out, retval] IMxDrawResbuf** ppRet 返 ...