BZOJ3258: 秘密任务

题解:

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

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

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

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

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

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

现在还没过。。。

代码:

  1 #include<cstdio>
  2 #include<cstdlib>
  3 #include<cmath>
  4 #include<cstring>
  5 #include<algorithm>
  6 #include<iostream>
  7 #include<vector>
  8 #include<map>
  9 #include<set>
 10 #include<queue>
 11 #include<string>
 12 #define inf 1000000000
 13 #define maxn 100000
 14 #define maxm 100000
 15 #define eps 1e-10
 16 #define ll long long
 17 #define pa pair<int,int>
 18 #define for0(i,n) for(int i=0;i<=(n);i++)
 19 #define for1(i,n) for(int i=1;i<=(n);i++)
 20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
 21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
 22 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
 23 #define mod 1000000007
 24 using namespace std;
 25 inline int read()
 26 {
 27     int x=0,f=1;char ch=getchar();
 28     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
 29     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
 30     return x*f;
 31 }
 32 int  n,m,s,t,maxflow,tot=1,a[maxn],u[maxn],v[maxn],w[maxn],head[maxn],cur[maxn],h[maxn];
 33 queue<int>q;
 34 ll d[2][maxn];
 35 bool vv[maxn],can[maxn];
 36 struct edge{int go,next,v;}e[maxm];
 37 void add(int x,int y,int v)
 38 {
 39     cout<<x<<‘ ‘<<y<<‘ ‘<<v<<endl;
 40     e[++tot]=(edge){y,head[x],v};head[x]=tot;
 41     e[++tot]=(edge){x,head[y],0};head[y]=tot;
 42 }
 43 void add2(int x,int y,int v)
 44 {
 45     e[++tot]=(edge){y,head[x],v};head[x]=tot;
 46     e[++tot]=(edge){x,head[y],v};head[y]=tot;
 47 }
 48 bool bfs()
 49 {
 50     for(int i=s;i<=t;i++)h[i]=-1;
 51     q.push(s);h[s]=0;
 52     while(!q.empty())
 53     {
 54         int x=q.front();q.pop();
 55         for(int i=head[x];i;i=e[i].next)
 56          if(e[i].v&&h[e[i].go]==-1)
 57          {
 58             h[e[i].go]=h[x]+1;q.push(e[i].go);
 59          }
 60     }
 61     return h[t]!=-1;
 62 }
 63 int dfs(int x,int f)
 64 {
 65     if(x==t) return f;
 66     int tmp,used=0;
 67     for(int i=cur[x];i;i=e[i].next)
 68      if(e[i].v&&h[e[i].go]==h[x]+1)
 69     {
 70         tmp=dfs(e[i].go,min(e[i].v,f-used));
 71         e[i].v-=tmp;if(e[i].v)cur[x]=i;
 72         e[i^1].v+=tmp;used+=tmp;
 73         if(used==f)return f;
 74     }
 75     if(!used) h[x]=-1;
 76     return used;
 77 }
 78 void dinic()
 79 {
 80     maxflow=0;
 81     while(bfs())
 82     {
 83         for (int i=s;i<=t;i++)cur[i]=head[i];maxflow+=dfs(s,inf);
 84     }
 85 }
 86 inline void dfss(int k,int x)
 87 {
 88     can[x]=1;
 89     cout<<"AAAAA "<<x<<endl;
 90     for4(i,x)if(e[i^k].v&&!can[y])dfss(k,y);
 91 }
 92 void spfa(int k,int s)
 93 {
 94     for (int i=1;i<=n;i++){vv[i]=0;d[k][i]=inf;}
 95     q.push(s);d[k][s]=0;vv[s]=1;
 96     while(!q.empty())
 97     {
 98         int x=q.front();q.pop();vv[x]=0;
 99         for (int i=head[x],y;i;i=e[i].next)
100          if(e[i].v&&d[k][x]+(ll)e[i].v<d[k][y=e[i].go])
101          {
102             d[k][y]=d[k][x]+(ll)e[i].v;
103             if(!vv[y]){vv[y]=1;q.push(y);}
104          }
105     }
106 }
107 int main()
108 {
109     freopen("input.txt","r",stdin);
110     freopen("output.txt","w",stdout);
111     int T=read();
112     while(T--)
113     {
114         n=read();m=read();
115         for1(i,n-1)a[i]=read();a[n]=inf;
116         memset(head,0,sizeof(head));tot=0;
117         for1(i,m){u[i]=read();v[i]=read();w[i]=read();add2(u[i],v[i],w[i]);}
118         spfa(0,1);spfa(1,n);
119         memset(head,0,sizeof(head));tot=1;
120         for1(i,m)
121         {
122             if(d[0][u[i]]+w[i]+d[1][v[i]]==d[0][n])add(u[i],v[i],min(a[u[i]],a[v[i]]));
123             if(d[0][v[i]]+w[i]+d[1][u[i]]==d[0][n])add(v[i],u[i],min(a[u[i]],a[v[i]]));
124         }
125         s=1;t=n;
126         dinic();
127         memset(can,0,sizeof(can));
128         dfss(0,s);dfss(1,t);
129         bool flag=0;
130         for1(i,n)for4(j,i)
131         {
132           cout<<i<<‘ ‘<<e[j].v<<‘ ‘<<e[j].go<<‘ ‘<<can[e[j].go]<<‘ ‘<<a[i]<<‘ ‘<<a[e[j].go]<<endl;
133           if((j&1)==0&&e[j].v==0&&a[i]==a[e[j].go])flag=1;
134           if(!can[e[j].go])flag=1;
135         }
136         printf("%s %d\n",flag?"No":"Yes",maxflow);
137     }
138     return 0;
139 }

卡掉我的数据

77 182
379144 698428 938640 388960 540949 364019 923498 161083 379161 546263 67508 946028 763144 666174 774392 522287 160432 823294 541850 474678 933172 502667 320829 436050 397761 539493 411093 703802 730697 409152 880392 352439 615122 673569 419734 973775 671533 72899 333380 323169 860351 929091 765259 745904 432060 601993 620743 327315 253111 300079 401670 292384 846512 692952 80569 320062 374591 249920 359805 201500 688319 391428 223128 42918 350254 437724 880443 257608 426985 809968 573136 566946 925304 488503 464726 273522
70 76 509135
23 12 230840
71 44 928258
70 38 195847
60 15 364228
5 8 915543
14 9 655721
66 74 80599
39 15 825467
75 28 770069
62 17 868306
77 39 716392
22 45 640011
29 31 738992
35 68 490817
69 66 210982
7 24 799906
43 15 740172
23 76 569033
44 62 905530
63 45 363251
64 25 70752
40 37 28156
34 62 844478
71 52 234903
77 41 434430
38 4 510383
8 71 589765
47 63 211829
21 60 517740
12 10 498696
25 70 646282
45 69 297256
35 19 166527
39 76 167911
54 75 349128
47 38 95253
62 76 702234
58 63 908625
63 53 391064
11 38 98147
37 15 6049
40 6 710270
60 30 763438
9 28 746782
62 6 14429
22 61 434869
49 20 476382
27 14 44611
48 69 442211
55 43 872512
11 27 631703
63 44 22138
48 21 889610
27 12 540629
43 23 970963
21 42 488002
10 55 151960
59 19 189978
29 38 985063
29 77 853749
1 2 142570
1 3 629206
1 4 570640
1 7 63272
1 13 516714
1 16 852235
1 18 140947
1 19 188835
1 20 802482
1 26 206273
1 32 457001
1 33 545140
1 36 370152
1 46 346429
1 50 824795
1 51 544873
1 56 939509
1 57 818224
1 65 532932
1 67 634313
1 72 665997
1 73 989787
1 61 2699692
72 41 2438741
69 8 879654
67 62 1681460
25 77 747156
19 75 3839221
41 17 79341
67 20 168169
46 70 930441
33 38 535883
8 42 940169
69 12 302890
19 69 1859777
16 42 3016200
2 51 402303
20 40 2011106
50 6 1505407
51 45 1206483
32 69 1591611
11 21 2201263
2 4 428070
20 75 3225574
32 20 345481
4 57 247584
11 9 1332035
9 42 1357230
20 27 1008391
73 54 3387397
33 3 84066
77 43 655693
35 77 2314946
73 44 420456
51 66 1714721
65 38 548091
32 31 2348077
62 48 175050
36 5 3473657
68 39 1107737
67 29 1431773
36 41 2734586
33 47 631136
4 49 708224
36 13 146562
60 17 40468
56 60 2204102
57 34 2342027
16 48 1638588
20 70 474388
35 61 2470874
64 31 811174
1 48 2364279
53 28 1478818
49 45 472492
33 12 1806362
70 9 1234335
9 30 1395844
62 21 1064660
13 10 2333484
56 25 983643
33 20 257342
7 56 876237
41 28 153249
68 58 1450551
14 17 1328595
26 53 1572896
1 51 418329
70 29 789216
32 45 1294355
58 5 1547079
46 37 2439003
26 3 422933
3 76 1156799
14 15 923899
27 55 1191285
39 29 112170
23 40 458550
67 73 355474
73 60 2153824
70 53 502299
18 43 3185054
53 54 2598015
37 42 1083003
3 64 1364698
68 15 1933204
49 28 1979123
9 15 268178
2 15 2636813
57 17 2365855
27 60 1332738
18 71 2197554
76 39 167911
20 41 2302256
2 31 2662508
3 53 1149963
59 24 484365
50 60 2318816
64 42 1874531
59 50 445982
68 24 16999

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

时间: 2024-10-08 07:13:27

BZOJ3258: 秘密任务的相关文章

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

这是<从产品角度学EXCEL>系列——单元格的秘密. 前言请看: 0 为什么要关注EXCEL的本质 1 EXCEL是怎样运作的 2 EXCEL里的树形结构 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布于特定网站.不接受任何无授权转载,如需转载,请先联系我,非常感谢. 在讲了excel的树形结构之后,我们终于要进入正题,研究单元格的秘密了. 当我们打开excel的时候,首先映入眼帘的就是一大片格子,这就是单元格. 在excel里,单元格承担了几乎所有的存储信息的功能.你

探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

原文:探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密 下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问百度首页的情景. 在firefox的请求瀑布图里有个表现非常之明显:就是javascript文件下载完毕后,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞

HR不会告诉你的秘密

原文转载自http://blog.csdn.net/happy08god/article/details/5534326 下面,只是摘出来一些基本的观点. 1. 入职时的工资高低不重要,只要你努力工作,就会得到相应的待遇 刚入职时,你的工资就是你的全部(销售岗位之类的除外),入职之后,大部分待遇都会跟着你的工资而浮动,调整也是基于目前的基数乘以一定的百分比,保险.公积金也和工资有关系. 所以,找工作时,千万不要心软,多争取一些基本工资,这是你刚入职时的所有. 2. 人事部不是你倾诉的对象,当问起

Java异常处理机制的秘密

一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw2.finally中throw一定能抛回上一层,因为此时其后的return不会被执行到(throw中断了正常的顺序流)3.在try/catch中return并不会直接返回上一层,而是先执行finally再返回 二.一段小程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

宅男网站架设的日常:安安的大尺度秘密私拍

公司白领安安,更大尺度视频版来了!在视频中真正完全的360° 无死角大尺度天性解放,傲人身材全面展示...臀部浑圆有肉,更有弹性,再次强力吐血推荐啊... 完整视频:安安的大尺度秘密私拍 悦色(yuese.in)是一个原创素人性感自拍,私拍,街拍分享平台,旨在邀请大家来共同发现和记录生活中的撩人悦色. 悦色官方网址:悦色 微信公众号:悦色阑珊(yuese3p) 玩家QQ群:悦色阑珊(235039743) 悦妹QQ:2497709343

绿色数据中心节能,值得探究的八大秘密

随着企业信息化建设的迅速发展,数据中心建设越来越重要,将直接影响企业信息系统的建设和应用效果.根据IDC的估算,从运行成本控制的角度看,在IT行业中,能源消耗成本已经达到企业硬件采购成本的25%.而数据却正以52%的复合年均增长率不断攀升.当企业面对不断变化的业务压力,以及呈指数级快速增长的数据时,需要对数据中心环保.节能方面的特性予以足够的考虑和重视. 如何在确保数据高度安全和高度可靠的前提下,最大限度地保证企业在数据中心建设中能够减少浪费和降低无效投入,打造一个真正"绿色节能"的数

谷歌弃用Intel、NVIDIA秘密研发处理器

前不久,谷歌围棋机器人AlphaGo横扫韩国天王李世石,资料显示这台AI(人工智能)设备堆砌了很多顶级芯片. 其中最低配置使用了48颗CPU和1颗GPU,最高配置AlphaGo被称为AlphaGo Distributed,在3月份的时候装配为1920颗CPU和280颗GPU,且在不断升级.当时对外公布的芯片提供商是Intel和NVIDIA.不过,从本届I/O大会上传来新消息,谷歌透露,打败韩国的那套AlphaGo其实内建了自家设计的微处理器.据悉,这种微处理器芯片隶属于应用专用集成电路(ASIC

你可能不知道的字符比较中的“秘密”

原文:你可能不知道的字符比较中的"秘密" 有时候,一个简单的字符比较,你可能也会被弄得晕头转向.为什么这样说呢?请看下面这个例子(代码就不贴了,因为后来发现页面不支持这两个字符的显示).猜测一下,会是什么结果?是1还是0? 回答这个问题之前,请再继续向下看.先创建几个不同排序规则的数据库(见数据库名可知). Figure-1: 在SQL_Latin1_General_CP1_CI_AS排序规则下的比较 Figure-2: 在Chinese_PRC_CI_AS排序规则下的比较 在SQL_

有人说中文编辑是解决中国程序员编程效率的秘密武器,请问他是一个银弹吗?

一.“银弹” 首先在这里解释一下“银弹”的概念,顾名思义就是银质的子弹(Silver Bullet),是古老的欧洲民间传说中能杀死狼人的利器.当然现实中是没有狼人的,但现实中确实有银弹这个东西.而其意义也类似于能杀死狼人的最好办法.现实中的狼人可以是一个棘手的项目,或者一件不可能的事.而“银弹”就是指能解决这些事的方法,或者技术手段,被比喻为具有极端有效性的解决方法,作为杀手锏 .王牌等的代称. IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表