ZOJ-2365 Strong Defence 无公共边割边集
题意:该题的题意晦涩,勉勉强强听别人说了一遍后再读了一遍题才算懂了题意,题图说的是A国因为B国药进攻自己的国家,于是想办法在联通A-B之间的路径上进行阻击。阻击的舰船停留在一个路径上,舰船上都要放置水晶,相同水晶的舰船可能会被一次性摧毁,于是现在要求给出尽可能多的方案来部署舰船,使得同一水晶的舰船能够阻断所有从B到A的路径,每条路径上只能够部署一部舰船。
分析:题意抽象之后就是一个网络求出从源点到汇点的尽可能多的割边集,且每个割边集没有公共边。根据题目的要求,我们设想从A到B的最短路长度为K,那么假设方案数大于K,那么每个割边集至少要包含该最短路上的一条边,否则存在从A到B的通路,那么这个包含的最优方法是一次包含一条,即便如此该过程也只能够进行K次,超过K次后必定不能够再包含最短路上的任何一条边,因此最后的答案就是K了,然后输出求出最短路之后的距离为1的边集即可。
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std; const int N = ;
int n, m, s, t;
int dis[N];
char vis[N], mp[N][N];
queue<int>q;
vector<int>v[N]; struct Edge {
int a, b;
}e[N*N]; void spfa() {
memset(dis, 0x3f, sizeof (dis));
memset(vis, , sizeof (vis));
dis[s] = , vis[s] = ;
q.push(s);
while (!q.empty()) {
int u = q.front();
q.pop();
vis[u] = ;
for (int v = ; v <= n; ++v) {
if (!mp[u][v]) continue;
if (dis[v] > dis[u] + ) {
dis[v] = dis[u] + ;
if (!vis[v]) {
vis[v] = ;
q.push(v);
}
}
}
}
} int main() {
int T;
scanf("%d", &T);
while (T--) {
memset(mp, , sizeof (mp));
scanf("%d %d %d %d", &n, &m, &s, &t);
int a, b;
for (int i = ; i < n; ++i) v[i].clear();
for (int i = ; i <= m; ++i) {
scanf("%d %d", &a, &b);
mp[a][b] = mp[b][a] = ;
e[i].a = a, e[i].b = b;
}
spfa();
printf("%d\n", dis[t]);
for (int i = ; i <= m; ++i) {
int a = e[i].a, b = e[i].b;
if (dis[a]+==dis[b]) {
v[dis[a]].push_back(i);
} else if (dis[b]+==dis[a]) {
v[dis[b]].push_back(i);
}
}
for (int i = ; i < dis[t]; ++i) {
printf("%d", v[i].size());
for (int j = ; j < v[i].size(); ++j) {
printf(" %d", v[i][j]);
}
puts("");
}
}
return ;
}
ZOJ-2365 Strong Defence 无公共边割边集的更多相关文章
- zoj 2874 & poj 3308 Paratroopers (最小割)
意甲冠军: 一m*n该网络的规模格.详细地点称为伞兵着陆(行和列). 现在,在一排(或列) 安装激光枪,激光枪可以杀死线(或塔)所有伞兵.在第一i安装一排 费用是Ri.在第i列安装的费用是Ci. 要安 ...
- POJ1815 Friendship(字典序最小最小割割边集)
看了题解.当时也觉得用邻接矩阵挺好写的,直接memset:然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic.. 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就 ...
- ZOJ-2365 Strong Defence 贪心,BFS
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2365 我没看懂题目...这样理解:一个有向图,要给一些边染色,使 ...
- zoj 2676 dinic模板求实型最小割(可做dinic模板)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #inc ...
- zoj 2676 Network Wars 0-1分数规划+最小割
题目详解出自 论文 Amber-最小割模型在信息学竞赛中的应用 题目大意: 给出一个带权无向图 G = (V,E), 每条边 e属于E都有一个权值We,求一个割边集C,使得该割边集的平均边权最小,即最 ...
- hdu1569 方格取数(2) 最大点权独立集=总权和-最小点权覆盖集 (最小点权覆盖集=最小割=最大流)
/** 转自:http://blog.csdn.net/u011498819/article/details/20772147 题目:hdu1569 方格取数(2) 链接:https://vjudge ...
- 【Java】 剑指offer(52) 两个链表的第一个公共结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...
- 160. Intersection of Two Linked Lists(剑指Offer-两个链表的第一个公共结点)
题目: Write a program to find the node at which the intersection of two singly linked lists begins. Fo ...
- 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割
[BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ...
随机推荐
- SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下: ...
- symfony中twig的模板载入
模板 载入模板 {% include ‘sidebar.html’ %} 当前模板的变量也会传递到 被include的模板里,在那里面可以直接访问你这个模板的变量. {% for comment in ...
- [ios]iOS 图形编程总结
转自:http://www.cocoachina.com/ios/20141104/10124.html iOS实现图形编程可以使用三种API(UIKIT.Core Graphics.OpenGL E ...
- easyui datebox 只选择年月
//将日期输入框变为年月的函数方法 var month=0; $('#effectiveDate').datebox({ onShowPanel: function () ...
- 利用Session实现一次验证码
Session可避免表单的重复提交:实现一次表单提交,可避免恶意提交: 1.首先建立一个Servlet类:ValidateColorServlet,里边有获取验证码的方法,并且验证码是大小写区分: p ...
- 简单的分页sql
select top 5 * from books where id not in(select top (5*(5-1)) id from Books order by id) order by i ...
- 【20160924】GOCVHelper综述
GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...
- 递归,动态规划,找最短路径,Help Jimmy
题目链接:http://poj.org/problem?id=1661 解题报告: 1.老鼠每次来到一块木板上都只有两条路可以走,可以使用递归 #include <stdio.h> #in ...
- servlet中Java连接数据库后的基本操作
servlet中Java连接数据库后的基本操作 在eclipse中新建一个工程:login 在Server中新建一个服务器,基本的操作不用说了,在前两天的笔记中可以找到; 需要知道数据库的用户名和密码 ...
- 2016年11月1日 星期二 --出埃及记 Exodus 19:17
2016年11月1日 星期二 --出埃及记 Exodus 19:17 Then Moses led the people out of the camp to meet with God, and t ...