<span style="font-family:Microsoft YaHei;font-size:14px;color:#000066;">被各种坑坑到意识模糊</span>
<pre name="code" class="cpp">#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define cl(x) memset(x,0,sizeof(x))
using namespace std;
typedef long long ll;inline char nc()
{static char buf[100000],*p1=buf,*p2=buf;if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }return *p1++;
} inline void read(int &x)
{char c=nc(),b=1;for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}#define U G[p].u
#define V G[p].v
namespace DINIC{  const int N=405;  const int M=120005;  struct edge{  int u,v,f;  int next;  }G[M];  int head[N],inum=1;  inline void add(int u,int v,int f,int p){  G[p].u=u; G[p].v=v; G[p].f=f; G[p].next=head[u]; head[u]=p;  }  inline void link(int u,int v,int f){  add(u,v,f,++inum); add(v,u,0,++inum);  }  int S,T;  int dis[N];  int Q[N],l,r;  inline bool bfs(){  memset(dis,-1,sizeof(dis)); l=r=-1;  Q[++r]=S; dis[S]=1;  while (l<r){  int u=Q[++l];  for (int p=head[u];p;p=G[p].next)  if (G[p].f && dis[V]==-1){  dis[V]=dis[u]+1; Q[++r]=V;  if (V==T) return 1;  }  }  return 0;  }  int cur[N];  ll dfs(int u,ll flow){  if (u==T) return flow;  ll used=0,now;  for (int p=cur[u];p;p=G[p].next)  {  cur[u]=p;  if (G[p].f && dis[V]==dis[u]+1)  {  now=dfs(V,min(flow-used,(ll)G[p].f));  G[p].f-=now,G[p^1].f+=now;  used+=now; if (flow==used) break;  }  }  if (!used) dis[u]=-1;  return used;  }  inline ll Dinic(){  ll ret=0;  while (bfs())  memcpy(cur,head,sizeof(cur)),ret+=dfs(S,1LL<<60);  return ret;  }inline void clear(){inum=1; cl(head);}
}int n,m;
int A[405];namespace SPFA{const int N=405;const int M=8005;struct edge{int u,v,w,next;}G[M];int head[N],inum;inline void add(int u,int v,int w,int p){G[p].u=u; G[p].v=v; G[p].w=w; G[p].next=head[u]; head[u]=p;}inline void link(int u,int v,int w){add(u,v,w,++inum); add(v,u,w,++inum);}long long dist[N],ins[N];const int NQ=100005;int Q[NQ],l,r;inline void Spfa(){int u; memset(dist,0x3f,sizeof(dist)); cl(ins);dist[1]=0; l=r=-1; Q[(++r)%NQ]=1; ins[1]=1;while (l!=r){u=Q[(++l)%NQ]; ins[u]=0;for (int p=head[u];p;p=G[p].next)if (dist[V]>dist[u]+G[p].w){dist[V]=dist[u]+G[p].w;if (!ins[V]) Q[(++r)%NQ]=V,ins[V]=1;}}}inline void clear(){inum=0; cl(head);}
}const int N=405;
int clk,pre[N],low[N];
int scc[N],cnt;
int Stk[N],pnt;inline void Tarjan(int u)
{using namespace DINIC;pre[u]=low[u]=++clk; Stk[++pnt]=u;for (int p=head[u];p;p=G[p].next){if (!G[p].f) continue;if (!pre[V]){Tarjan(V);low[u]=min(low[u],low[V]);}else if (!scc[V])low[u]=min(low[u],pre[V]);}if (low[u]==pre[u]){int v; ++cnt;for (int v;v!=u;)v=Stk[pnt--],scc[v]=cnt;}
}int ans;
int vst[N];inline void Link(int u,int fa=0)
{using namespace SPFA;if (vst[u]) return;vst[u]=1;for (int p=head[u];p;p=G[p].next)if (dist[u]==dist[V]+G[p].w)DINIC::link(V,u,min(A[V],A[u])),Link(V,u);
}inline void Build(){cl(vst); Link(n);DINIC::S=1; DINIC::T=n; ans=DINIC::Dinic();
}int main()
{int iu,iv,iw; int T;read(T);while (T--){read(n); read(m);for (int i=1;i<n;i++) read(A[i]); A[n]=1<<30;for (int i=1;i<=m;i++)read(iu),read(iv),read(iw),SPFA::link(iu,iv,iw);SPFA::Spfa();Build();pnt=cnt=0; clk=0; cl(pre); cl(low); cl(scc);for (int i=1;i<=n;i++)if (!pre[i])Tarjan(i);int flag=0;using namespace DINIC;for (int p=2;p<=inum;p+=2){if (G[p].f) continue; if (scc[U]!=scc[V] && !(scc[U]==scc[1] && scc[V]==scc[n]))flag=1;if (scc[U]==scc[1] && scc[V]==scc[n] && A[U]==A[V])flag=1;}!flag?printf("Yes"):printf("No");printf(" %d\n",ans);DINIC::clear(); SPFA::clear(); }return 0;
}

[最小割唯一性 Tarjan 最短路图] BZOJ 3258 秘密任务相关推荐

  1. [最小割最大流 || 最短路] roadblock Dinic SPFA + SLE

    大家都很强, 可与之共勉. 震惊!cky 竟率兵攻打jyb! jyb 面对强敌,振作精神,想要抗击侵略.jyb 的国家一共有n 个城市,m 条距离为1 的双向道路.现在jyb的所在地是1 号城市,ck ...

  2. hdu3035 最小割转换成最短路

    题意:       给你一个平面图,要求从求出从左上角到右下角的最小割. 思路:       如果大意的可能直接上来一遍最大流,然后就会各种悲剧的MLE,TLE,其实这个题目可以用到有个论文里面的那个 ...

  3. bzoj1797 最小割唯一性问题

    题目大意 有两问: 判断一条边是否可以在最小割中: 判断一条边是否一定在最小割中. 做法: 首先做一遍最大流得到残量网络. 第一问 对于第一问,我们设这条边为 (u,v) (u,v). 则残量网络上从 ...

  4. bzoj 3258 秘密任务

    http://www.elijahqi.win/archives/3689 Description Alice听说在一片神奇的大陆MagicLand,有一个古老的传说--很久很久以前,那个时候 Mag ...

  5. nssl1299-选做作业【最大流,最小割,最大子权闭合图】

    正题 题目大意 有nnn个任务,完成需要先决条件,然后有完成价值.选择一些任务完成,求最大价值. 解题思路 首先,如果有环,那么这些环是不可能完成的.所以先用拓扑排序找环. 然后考虑最大子权闭合图,对 ...

  6. 【BZOJ1266】【AHOI2006】上学路线route 最短路建图转最小割

    题解: 首先那个裸的单源最短路过程就过了吧. 然后说转的最小割. 就是我们考虑到从源点到汇点有多条最短路,我们需要切断一些边,使得所有的最短路都被切断. 首先这是个很裸的模型,切断?最小割! 如果你想 ...

  7. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...

  8. hdu3870 基于最短路的最小割

    题意:      给你一个平面图,让你输出(1,1),(n ,n)的最小割.. 思路:       看完题想都没想直接最大流,结果TLE,想想也是 G<400*400,400*400*4> ...

  9. hdu 6852Path6(最短路+最小割)

    传送门 •题意 有n个城市,标号1-n 现花费最小的代价堵路 使得从1号城市到n号城市的路径边长 (注意只是变长不是最长) 堵一条路的代价是这条路的权值 •思路 在堵路以前,从1到n的最小路径当然是最 ...

最新文章

  1. 「完结」总结12大CNN主流模型架构设计思想
  2. php简单异常,PHP实现的简单异常处理类示例
  3. mysql冷备增量备份,MySQL备份与恢复之真实环境使用冷备(2)
  4. WPF中读取txt文件并让其在RichTextBox中显示
  5. 国产CPU群雄逐鹿谁主沉浮
  6. iOS设计模式 - 迭代器
  7. PHPMailer目录和命名空间没有错,但是始终class not found,的原因和解决方法
  8. HTML基础(2)——边框
  9. SAP License:集团化企业的协同管理
  10. java中double类型显示两个小数,比如12.00
  11. pandas pivot 计算占比_pandas使用9:如何处理时间序列数据
  12. Thrift框架简介
  13. 2022-8-4用GPS模块和Arduino制作一个多功能车辆测速仪
  14. 冰点还原精灵如何安装
  15. 将m个相同的球全部放到n个相同的盒子里面有几种放法
  16. jdk8中新增的日期处理类LocalDate,LocalTime,LocalDateTime,ZoneId,ZonedDateTime详解
  17. OTG – Android USB Hos
  18. 身份证批量识别 免费 身份证OCR识别 如何用python实现身份证识别
  19. iOS开发中的好工具
  20. revit运行dll文件弹出:未能加载文件或程序集“presentationframework, Version=5.0.0.0, Culture=neutral, PublicKeyToken

热门文章

  1. QQ网页导航栏列表 ul制作
  2. nginx 反向代理斜杠问题
  3. 苹果光盘刻录实用技巧指南(转)
  4. 天气json解析_彩云天气 API
  5. 2.17.内核的移植1-从三星官方内核开始移植
  6. 巯基吡啶化CdSe/ZnS量子点,ZnSe/ZnS量子点SH-ZnCdS/ZnS QDs,ZnCdS/ZnS量子点,OPSS-CdSe/ZnS QDs
  7. Maven搭建Spring框架
  8. 如何在Google Chromebook上更改墙纸和主题
  9. 13 某知名网站测试实战
  10. 从excel导入数据至PostgreSQL数据库