题解:

其实就是一个简单的最小割判断是否唯一解。。。

可是我写了一上午还没过。。。T_T

把1-n的最短路上的边提出来做最小割。

然后从s,t分别bfs判断必须在某个割的点。如果有的点没有被bfs到,那么最小割方案不为1。

因为s到它的边满流,它到t的边也满流,哪条边都可以作为割边。

但还是有很多坑点啊!!!一条路两端的权值相同。。。

现在还没过。。。

代码:

 #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 100000
#define maxm 100000
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,s,t,maxflow,tot=,a[maxn],u[maxn],v[maxn],w[maxn],head[maxn],cur[maxn],h[maxn];
queue<int>q;
ll d[][maxn];
bool vv[maxn],can[maxn];
struct edge{int go,next,v;}e[maxm];
void add(int x,int y,int v)
{
cout<<x<<' '<<y<<' '<<v<<endl;
e[++tot]=(edge){y,head[x],v};head[x]=tot;
e[++tot]=(edge){x,head[y],};head[y]=tot;
}
void add2(int x,int y,int v)
{
e[++tot]=(edge){y,head[x],v};head[x]=tot;
e[++tot]=(edge){x,head[y],v};head[y]=tot;
}
bool bfs()
{
for(int i=s;i<=t;i++)h[i]=-;
q.push(s);h[s]=;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next)
if(e[i].v&&h[e[i].go]==-)
{
h[e[i].go]=h[x]+;q.push(e[i].go);
}
}
return h[t]!=-;
}
int dfs(int x,int f)
{
if(x==t) return f;
int tmp,used=;
for(int i=cur[x];i;i=e[i].next)
if(e[i].v&&h[e[i].go]==h[x]+)
{
tmp=dfs(e[i].go,min(e[i].v,f-used));
e[i].v-=tmp;if(e[i].v)cur[x]=i;
e[i^].v+=tmp;used+=tmp;
if(used==f)return f;
}
if(!used) h[x]=-;
return used;
}
void dinic()
{
maxflow=;
while(bfs())
{
for (int i=s;i<=t;i++)cur[i]=head[i];maxflow+=dfs(s,inf);
}
}
inline void dfss(int k,int x)
{
can[x]=;
cout<<"AAAAA "<<x<<endl;
for4(i,x)if(e[i^k].v&&!can[y])dfss(k,y);
}
void spfa(int k,int s)
{
for (int i=;i<=n;i++){vv[i]=;d[k][i]=inf;}
q.push(s);d[k][s]=;vv[s]=;
while(!q.empty())
{
int x=q.front();q.pop();vv[x]=;
for (int i=head[x],y;i;i=e[i].next)
if(e[i].v&&d[k][x]+(ll)e[i].v<d[k][y=e[i].go])
{
d[k][y]=d[k][x]+(ll)e[i].v;
if(!vv[y]){vv[y]=;q.push(y);}
}
}
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int T=read();
while(T--)
{
n=read();m=read();
for1(i,n-)a[i]=read();a[n]=inf;
memset(head,,sizeof(head));tot=;
for1(i,m){u[i]=read();v[i]=read();w[i]=read();add2(u[i],v[i],w[i]);}
spfa(,);spfa(,n);
memset(head,,sizeof(head));tot=;
for1(i,m)
{
if(d[][u[i]]+w[i]+d[][v[i]]==d[][n])add(u[i],v[i],min(a[u[i]],a[v[i]]));
if(d[][v[i]]+w[i]+d[][u[i]]==d[][n])add(v[i],u[i],min(a[u[i]],a[v[i]]));
}
s=;t=n;
dinic();
memset(can,,sizeof(can));
dfss(,s);dfss(,t);
bool flag=;
for1(i,n)for4(j,i)
{
cout<<i<<' '<<e[j].v<<' '<<e[j].go<<' '<<can[e[j].go]<<' '<<a[i]<<' '<<a[e[j].go]<<endl;
if((j&)==&&e[j].v==&&a[i]==a[e[j].go])flag=;
if(!can[e[j].go])flag=;
}
printf("%s %d\n",flag?"No":"Yes",maxflow);
}
return ;
}

卡掉我的数据


输出应该是yes,但我是no。输出结果显示68不会被bfs到。T_T

BZOJ3258: 秘密任务的更多相关文章

  1. bzoj3258秘密任务

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3258 因为只走最短路,所以先正反两遍djkstra,新建边. 这里的边是单向边.所以要用原来 ...

  2. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  3. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  4. 网站的SEO以及它和站长工具的之间秘密

    博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...

  5. 《WePayUI组件设计的秘密》——2016年第一届前端体验大会分享

    本文是博主参加第一届前端体验大会 | 物勒工名做的分享<WePayUI组件设计的秘密>,内容主要分为2个部分: 一.浅析UI库/框架的未来 讨论的UI库或者框架,主要包含展示和交互的css ...

  6. [从产品角度学EXCEL 03]-单元格的秘密

    这是<从产品角度学EXCEL>系列——单元格的秘密. 前言请看: 0 为什么要关注EXCEL的本质 1 EXCEL是怎样运作的 2 EXCEL里的树形结构 或者你可以去微信公众号@尾巴说数 ...

  7. 2016第16本:TED演讲的秘密

    花0.01元抢购了<得到APP>中的<成甲说书:TED演讲的秘密>,不到30分钟的音频,感觉全是干货,基本不用看原书了.如果在以后的演讲中随便应用几条都可以让演讲水平提升一大截 ...

  8. 字符串的replace()方法隐藏着什么不可告人秘密?

    最近在做JS算法项目时发现一个令我匪夷所思的问题, 这里想记录一下问题. 首先介绍一下字符串replace()方法的基本用法. replace() 方法使用一个替换值(replacement)替换掉一 ...

  9. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

随机推荐

  1. PHP获取IP及地区信息(纯真IP数据库)

    昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...

  2. Demo学习: ClientInfo

    ClientInfo 获取客户端环境参数,从0.9版本开始新增了TUniClientInfoRec对象,可以得到客户端的一些信息,之前为了获取浏览器版本号需要自己写函数,现在可以直接使用TUniCli ...

  3. NVIDIA显卡设置提升MineCraft流畅度

    很喜欢MineCraft(我的世界)这款游戏.可09年Y450的配置现在看来有点弱,尽管将Y450的CPU升级至了2.8Ghz的T9600,内存升级至1066Mhz的4G双通道内存,硬盘更换为128G ...

  4. PyQt 5.2 发布,此版本完全支持Qtv5.2.0

    PyQt 5.2 发布,此版本完全支持Qtv5.2.0 :包括了新的 QtBluetooth,QtPositioning,QtMacExtras,QtWinExtras 和 Qt11Extras 模板 ...

  5. Beaglebone Back学习四(GPIO实验)

    GPIO Beaglebone Back开发板引出了92个引脚,其中只有65个GPIO口可通过配置使用,由于引脚具有“复用”的特性,大约每个引脚有8种工作模式(Beagle System Refere ...

  6. Linux安装oracle 10g常见问题之——OUI-25031

    OUI-25031:Some of the configuration assistants failed/cancelled. 这是安装过程中常见的错误之一. 引起此错误的原因:/etc/hosts ...

  7. 解决未能从程序集xxx中加载类型System.ServiceModel.Activation.HttpModule的问题

    在IIS中运行网站时,出现错误: 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c ...

  8. UltraEdit 列模式

    使用UltraEdit 列模式 1 进入UltraEdit列模式 a)       通过快捷方式 Alt +c b)       UltraEdit --> Column Mode

  9. 用上新的电脑装上了VS2013了

    今天老魏终于把配置好的电脑拿回来了,16G的内存,I7 4770CPU.这回啊,老魏终于可以舍弃我的本本了,装上了SQL Server,虚拟机等等运行高内存的程序,感觉就是爽.明天老魏就可以用VS20 ...

  10. 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

    步骤一:首先自定义类(这里Himi自定义类名 “MySprite”) MySprite.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // //  ...