可耻的苟到数据后搞了一波题

首先标解绝对不是倍增floyd

这是n^3logn的算法

二分+DFS_SPFA是nlogn的算法

但是在学习嘛

所谓标解:

#include<bits/stdc++.h>
using namespace std;
const int N=310;
int n,m;
struct Matrix{int a[N][N];friend Matrix operator * (Matrix A,Matrix B){Matrix C;memset(C.a,0x3f,sizeof(C.a));for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){C.a[i][j]=min(C.a[i][j],A.a[i][k]+B.a[k][j]);}}}return C;}
}a[N],x;
int main(){
//  cout<<"218"<<'\n';scanf("%d%d",&n,&m);
//  cout<<"8791897"<<'\n';memset(x.a,0x3f,sizeof(x.a));memset(a[0].a,0x3f,sizeof(a[0].a));for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);a[0].a[u][v]=w;    }for(int i=1;i<=n;i++){a[0].a[i][i]=x.a[i][i]=0;}int len=0;while((1<<len)<=n)len++;len--;for(int i=1;i<=len;i++){a[i]=a[i-1]*a[i-1];}Matrix tmp;int ans=0;for(int j=len;j>=0;j--){tmp=x*a[j];int flag=1;for(int i=1;i<=n;i++){if(tmp.a[i][i]<0){flag=0;break;  }       }if(flag==1)x=tmp,ans+=(1<<j);}if(ans>n)cout<<0;cout<<ans+1;
} 

比标解快几倍的解法:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;const int ONE = 305;
const int EDG = ONE*ONE; int n,m;
int x,y,z;
int nxt[EDG],first[EDG],go[EDG],w[EDG],tot;
int vis[ONE],dist[ONE];
int PD;int get()
{int res=1,Q=1;    char c;while( (c=getchar())<48 || c>57)if(c=='-')Q=-1;if(Q) res=c-48; while((c=getchar())>=48 && c<=57) res=res*10+c-48; return res*Q;
}void Add(int u,int v,int z)
{nxt[++tot]=first[u];    first[u]=tot;    go[tot]=v;    w[tot]=z;
}void Spfa(int u,int T,int Limit)
{if(PD) return;for(int e=first[u];e;e=nxt[e]){int v = go[e];if(dist[u]+w[e] <= dist[v]){if(vis[v]) {PD = 1; return;}if(T==Limit) return;dist[v] = dist[u] + w[e];vis[v] = 1;Spfa(v,T+1,Limit);vis[v] = 0;}}
}int Check(int Limit)
{PD = 0;for(int i=1;i<=n;i++){memset(vis,0,sizeof(vis));  vis[i] = 1;memset(dist,0,sizeof(dist));Spfa(i,1,Limit);if(PD) return 1;}return 0;
}int main()
{n=get();    m=get();for(int i=1;i<=m;i++){x=get();    y=get();    z=get();Add(x,y,z);}if(!Check(n)) {printf("0"); exit(0);}int l=1, r=n;while(l < r-1){int mid = l+r>>1;if(Check(mid)) r = mid;else l = mid;}if(Check(l)) printf("%d",l);else printf("%d",r);
}

转载于:https://www.cnblogs.com/Leo-JAM/p/10079253.html

省选专练 【BZOJ4773】负环相关推荐

  1. bzoj4773 负环

    Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边和自环. Input 第1 ...

  2. R6饮料AK赛(NOIP模拟赛)/省选专练HDU 5713 K个联通块

    我好菜啊100+60+30 滚犊子吧,两天加起来才410搞个屁我一年前都可以考400 不说了,题毕竟比较难 T1还是水题但是比昨天难 这是一个开绝对值不等式的题. 根据对奇数和偶数的最优根的归纳一定有 ...

  3. 网络流学习总结和省选专练SCOI2015小凸玩矩阵

    这是四川连着第几个年头考二分套网络流了? 虽然这是一个二分图最大匹配,但是我匈牙利写挂了. 我太弱了. 好了不瞎扯牛逼了,这个题这么搞: 首先题目就告诉你求第k大最小. 首先这就让人瑟瑟发抖....第 ...

  4. 省选专练之文艺计算姬

    "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬. 文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一 ...

  5. 省选专练(学习)可持久化Trie树(BZOJ3261)

    这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...

  6. 省选专练[CQOI2007]涂色

    不好理解的DP 伪区间DP F(i,j)表示子串i-j实现的方式最小 当i=j时明显为1 当s[i]==s[j]时 这里是理解的重难点: 通过递归可知当你刷i的时候顺便刷到j就好了 然后就是标准的区间 ...

  7. 省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring

    陈老师引入SAM的例题 求两个串的LCS 直接建一个串的SAM,并且把另外一个串放进去跳. 这个方法很经典! 几乎满足了所有两个串的公共串问题的所有解法 有巨子说这个跳是均摊Log的,我也不知道QwQ ...

  8. 省选专练之神仙贪心IOI2013Robert

    [问题描述] 小沐把玩具扔在地板上,乱七八糟.庆幸的是,有一种特殊的机器人可以收拾玩具.不过他需要 确定哪个机器人去拣哪个玩具. 一共有 T 个玩具,整数 w[i]表示这个玩具的重量,整数 s[i]表 ...

  9. 省选专练(学习)AC自动机

    我好菜啊 AC自动机都不会 AC自动机可以干什么: 用一个模板串匹配多个子串. 这便让AC自动机可以干许多KMP和Tri树不能干的事. AC自动机的构造 首先建立一颗Trie树. 其次利用KMP的思想 ...

最新文章

  1. 实心和空心哪个抗弯能力强_空心砖4大优缺点一次看 便宜耐用营造大自然原始风...
  2. Node中使用mysql模块遇到的问题
  3. 带头节点循环链表实现队列
  4. redirect重定向后https变成了http如何解决
  5. dmp导入数据 oracle_一文看懂oracle12c数据库跨小版本迁移
  6. GIT基本概念和用法总结
  7. Intel酷睿前世今生(二)
  8. linux攻防比赛_LINUX 遭到SYN FLOOD攻击 LINUX下SYN攻防战
  9. 简单两个矩阵如何用计算机运算,矩阵运算-如何用卡西欧fx-82es计算器计算矩阵和 – 手机爱问...
  10. 七月流火,让我们共享一场开源数据库的饕餮盛宴
  11. linux 主机名称修改
  12. IT人论房价 (七) 城市置业乱谈
  13. 判断抽样检验产品是否合格的步骤
  14. 「 LaTex 」 写论文,插入图片方法
  15. 递归学习_组合_全组合排列
  16. 数字地图制作原则细节
  17. SELinux之一:SELinux基本概念及基本配置
  18. 学生使用计算机注意事项有哪些,购买笔记本有哪些注意事项?学生购买笔记本八项注意...
  19. [LayoutConstraints] Unable to simultaneously satisfy constraints.
  20. 好用的iOS开发工具

热门文章

  1. linux中如何分割字符串数组中,关于bash:linux shell脚本:拆分字符串,将它们放入一个数组中,然后循环遍历它们...
  2. mysql 6.0 新特性 2014_MySQL 各版本的特性
  3. typecho反序列化漏洞复现
  4. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
  5. JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】...
  6. Laravel5.2之模型关联预加载
  7. NPOI读写Excel sheet操作
  8. ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
  9. C#泛型委托Predicate、Action、Func
  10. 对Linux网络配置管理的简单使用经验