题意:Innocent Wu只能走最短路,
两问:1,Dumb Zhang要阻止他找到自己,最少需要切断多少路。
做法:把最短路都找出来然后建图,然后求图的最小割(最大流等于最小割)
2,Dumb Zhang最多切断多少路但Innocent Wu仍能找到Dumb Zhang。
做法:在最短路的图上找出起点1能到终点n经过的最小边数k,然后全部边tol-k即是答案

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <stack>
#include <vector>
#include <string.h>
#include <queue>
#define msc(X) memset(X,-1,sizeof(X))
#define ms(X) memset(X,0,sizeof(X))
typedef long long LL;
using namespace std;
const int MAXN=2005;
const int MAXM=120005;
const int INF=0x3f3f3f3f;
struct _Edge
{int frm,to,next,l;bool operator <(const _Edge &b) const{return l>b.l;}
}edge[MAXM];
int hd[MAXN],tol;
void addedge(int u,int v ,int l)
{edge[tol].frm=u;edge[tol].to=v;edge[tol].next=hd[u];edge[tol].l=l;hd[u]=tol++;
}
bool vis[MAXN];
int dist[MAXN];
void Dijkstra(int st,int n)
{ms(vis);for(int i=1;i<=n;i++) dist[i]=INF;dist[st]=0;priority_queue<struct _Edge> que;while(!que.empty()) que.pop();struct _Edge tmp;tmp.to=st,tmp.l=0;que.push(tmp);while(!que.empty()){tmp=que.top();que.pop();int u=tmp.to;if(vis[u]) continue;vis[u]=true;for(int i=hd[u];i!=-1;i=edge[i].next){int v=edge[i].to,l=edge[i].l;if(!vis[v]&&dist[v]>dist[u]+l){tmp.l=dist[v]=dist[u]+l;tmp.to=v;que.push(tmp);}}}
}
struct _NWEdge
{int to,next,cap,flow;
}nwedge[MAXM];
int nwtol,nwhd[MAXN];
void nwaddedge(int u,int v,int w,int rw=0)
{nwedge[nwtol].to=v;nwedge[nwtol].cap=w;nwedge[nwtol].flow=0;nwedge[nwtol].next=nwhd[u];nwhd[u]=nwtol++;nwedge[nwtol].to=u;nwedge[nwtol].cap=rw;nwedge[nwtol].flow=0;nwedge[nwtol].next=nwhd[v];nwhd[v]=nwtol++;
}
int Q[MAXN],dep[MAXN],cur[MAXN],sta[MAXN];
bool bfs(int s,int t,int n)
{int front=0,tail=0;msc(dep);dep[s]=0;Q[tail++]=s;while(front<tail){int u=Q[front++];for(int i=nwhd[u];i!=-1;i=nwedge[i].next){int v=nwedge[i].to;if(nwedge[i].cap>nwedge[i].flow&&dep[v]==-1){dep[v]=dep[u]+1;if(v==t) return true;Q[tail++]=v;}}}return false;
}
int dinic(int s,int t,int n)
{int maxflow=0;while(bfs(s,t,n)){for(int i=1;i<=n;i++) cur[i]=nwhd[i];int u=s,tail=0;while(cur[s]!=-1){if(u==t){int tp=INF;for(int i=tail-1;i>=0;i--)tp=min(tp,nwedge[sta[i]].cap-nwedge[sta[i]].flow);maxflow+=tp;for(int i=tail-1;i>=0;i--){nwedge[sta[i]].flow+=tp;nwedge[sta[i]^1].flow-=tp;if(nwedge[sta[i]].cap==nwedge[sta[i]].flow)tail=i;}u=nwedge[sta[tail]^1].to;}else if(cur[u]!=-1&&nwedge[cur[u]].cap>nwedge[cur[u]].flow&&dep[u]+1==dep[nwedge[cur[u]].to]){sta[tail++]=cur[u];u=nwedge[cur[u]].to;}else {while(u!=s&&cur[u]==-1)u=nwedge[sta[--tail]^1].to;cur[u]=nwedge[cur[u]].next;}}}return maxflow;
}
struct _MC
{int nd,dist;
};
int main(int argc, char const *argv[])
{int n,m;while(scanf("%d%d",&n,&m)==2){msc(hd);msc(nwhd);tol=nwtol=0;while(m--){int a,b,l;scanf("%d%d%d",&a,&b,&l);addedge(a,b,l);addedge(b,a,l);}Dijkstra(1,n);for(int i=0;i<tol;i++){int u=edge[i].frm,v=edge[i].to;if(dist[u]+edge[i].l==dist[v])nwaddedge(u,v,1,0);}printf("%d ",dinic(1,n,n) );struct _MC tmp;tmp.nd=1,tmp.dist=0;queue<struct _MC> q;while(!q.empty()) q.pop();q.push(tmp);int ans2=0;while(!q.empty()){tmp=q.front();q.pop();int u=tmp.nd;for(int i=nwhd[u];i!=-1;i=nwedge[i].next){int v=nwedge[i].to;if(v==n) {ans2=tmp.dist+1;break;}struct _MC ntmp;ntmp.nd=v,ntmp.dist=tmp.dist+1;q.push(ntmp);}if(ans2) break;}printf("%d\n",tol/2-ans2 );}return 0;
}

hdu5294(Tricks Device)题解相关推荐

  1. hdu 5294 Tricks Device

    中规中矩的做法,第二发SAP.贴一发留恋. #include<cstdio> #include<cstring> #include<algorithm> #incl ...

  2. Tricks Device 最短路+最大流

    http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1006&ojid=0&cid=12578&hide= ...

  3. HDU 5294 Tricks Device(最短路+最大流)

    题意:给一个无向图(连通的),张在第n个点,吴在第1个点,'吴'只能通过最短路才能到达'张',两个问题:(1)张最少毁掉多少条边后,吴不可到达张(2)吴在张毁掉最多多少条边后仍能到达张. 思路:将所有 ...

  4. 图像分类任务中的tricks总结

    点击我爱计算机视觉标星,更快获取CVML新技术 本文来自机器学习小王子(ID:MachineLearningLab),原文链接图像分类任务中的tricks总结. 计算机视觉主要问题有图像分类.目标检测 ...

  5. 目标检测tricks(基于detectron2)

    目标检测tricks(基于detectron2) 正确尝试 裁剪 由于目标相对于整张图片来说过小,所以对数据进行裁剪(除了裁剪尺寸还需要关注重叠尺寸,重叠尺寸稍微大一些,尽量保持每个目标有完整的存在, ...

  6. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  7. Remote Development Tips and Tricks

    目录 SSH tips# Configuring key based authentication# Quick start: Using SSH keys# Improving your secur ...

  8. 郑州大学“战役杯”第二次比赛题解

    1 公司的Logo 为了感谢河南省八六三软件有限公司对战疫杯ACM在线程序设计竞赛的大力支持,小Y决定为公司制作个logo. logo通常要用在各种不同的场景,因此logo的尺寸必须是可变的.现给你原 ...

  9. PP-YOLO论文中小tricks的个人理解

    PP-YOLO 摘要 介绍 方法 网络结构 Trick Trick1.大的batch_size Trick2.EMA Trick3.DropBlock Trick4.IOU Loss Trick5.I ...

  10. Cisco IOS Command Tips and Tricks – Part 2

    Last updated on August 9, 2019 Cisco IOS command list is getting longer , and it has been split into ...

最新文章

  1. Spring Mock单元测试
  2. Java字符类型练习
  3. 从小屏到大屏,触控技术的现在与未来
  4. 先序序列为a、b、c、d的不同二叉树的个数是多少(卡特兰数)
  5. [云炬创业基础笔记]第六章商业模式测试9
  6. eShopOnContainers 看微服务④:Catalog Service
  7. mysql 设计模式_mysql – 你会推荐什么版本设计模式
  8. Google research 一行预处理代码,让你的CV模型更强!
  9. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(5-6)
  10. 无法访问机械硬盘提示执行页内操作时的错误的文件恢复办法
  11. 圆周卷积(circular convolution)
  12. 微信仿今日头条导航栏滚动
  13. Threading模块
  14. 惠普m128fn中文说明书_hp m125m126m127m128使用说明.pdf
  15. imp oracle reschema_oracle中imp命令详解(导入数据库)
  16. udal导mysql_MySQL性能测试工具之mysqlslap
  17. Volatility3安装
  18. [特别篇] 评中国药学家距诺贝尔奖一步之遥
  19. js日期字符串(年月日)与时间戳的转换
  20. c语言编程培训心得体会,编程培训个人心得体会 编程学习心得

热门文章

  1. java实战--GC终极总结
  2. uncompyle6出现Unknown magic number 227
  3. 小白Java求学之路之一:控制台实现用户注册、登录
  4. Element UI中的Descriptions描述列表
  5. [2019/12]饮水姑苏,止于至善
  6. 0《数学之美》作者、赞誉、说明、序言、前言
  7. ReferenceError: server is not defined
  8. 请问下面这段代码哪里有错? private static final String s=
  9. [Error] ld returned 1 exit status
  10. 以计算机网络为中介的人际传播,人际传播在传媒中的运用