uva1658 admiral】的更多相关文章

/** 题目:UVA1658 Admiral 链接:https://vjudge.net/problem/UVA-1658 题意:lrj入门经典P375 求从s到t的两条不相交(除了s和t外,没有公共点)的路径,使得权值和最小. 思路:拆点法. 除了s,t外.把其他点都拆成两个. 例如点A,拆成A和A'.A指向A'连一条容量为1,花费为0的边. 原来指向A的,仍然指向A点. 原来A指向其他点的,由A'指向它们. 最小费用最大流求流量为2时候的最小费用即可. */ #include<iostrea…
费用流. 裸的拆点最小费用流,一跑就行. 核弹预警,为何wa20多发.build函数一定要返回true...... 太可怕了 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; + ; + ; const int inf = 0x3f3f3f3f; int g[maxn],v[maxm],nex[maxm],c[maxm],f[…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51253 [思路] 固定流量的最小费用流. 拆点,将u拆分成u1和u2,连边(u1,u2,1,0)表示只能经过该点一次.跑流量为2的最小费用流. [代码] #include<cstdio> #include<cstring> #include<queue> #include<vector> #define FOR(a,b,c)…
题意:给定一个有向带权图,求两条不相交(无公共点)的路径且路径权值之和最小,路径由1到v 题解:这题的关键就在于每个点只能走一遍,于是我们想到以边换点的思想,用边来代替点,怎么代替呢? 把i拆成i和i',这样经过i就转化为经过i到i'的路径了,从而用最小费用流即可 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<queue> #in…
多校10 1001 HDU 6171 Admiral 题意 目标状态是第i行有i+1个i数字(i=0-5)共6行.给你初始状态,数字0可以交换上一行最近的两个和下一行最近的两个.求20步以内到目标状态的最少步数是多少. 题解 设计一个估价函数来剪枝,每个数最少需要|a[i][j]-i|步回到自己的位置.当所有数回到自己位置,0自然也回到自己位置.所以估价函数不计算0. 然后21个位置,每个位置数字是0-5,用三位2进制表示.总共63位2进制.long long可以记录状态.然后就是搜索了. 代码…
uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终点的两点间的容量为2费用为0,保证了仅仅找出两条线路.其余点的容量为1费用为0,保证每点仅仅走一遍,两条线路无交集.然后依据题目给出的要求继续建图.每组数据读入a, b, c, 建立a'到b的边容量为1, 费用为c.图建完之后,用bellman-ford来实现MCMF. #include <cstdio…
3. C - Admiral 题意:给定v(3<=v<=1000)个节点,e(3<=e<=10000)条边的又向加权图,求1->v的两条不相交的路径,使得权和最小. 思路: 拆点+最小费用最大流 解题代码: #include <cstdio> #include <cstring> #include <queue> #include <vector> using namespace std; #define rep(i,a,n)…
UVALive - 6266 Admiral 题意:找两条完全不相交不重复的路使得权值和最小. 思路:比赛的时候时间都卡在D题了,没有仔细的想这题,其实还是很简单的,将每个点拆开,连一条容量为1,费用为0的边,起点和终点容量为2,两点之间有边就加一条容量为1,费用为权值的边,这样跑一边费用流就可以了. #pragma comment(linker, "/STACK:1000000000") #include <bits/stdc++.h> #define LL long l…
Problem Description Suppose that you are an admiral of a famous naval troop. Our naval forces have got 21 battleships. There are 6 types of battleships. First, we have got one flagship in which the admiral must be and it is denoted by number 0. Other…
题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直出不了结果,原来是初始化少了一点. 注意的是:我想我的建图方法较刘汝佳的方法有一点小区别,加一个源点S,和汇点T,刘汝佳的方法是把2—v-1拆掉. 然后这里拆点有些技巧.还是阳哥教我的. #include <iostream> #include <stdio.h> #include &…
题意: 给出一个有向带权图,求从起点到终点的两条不相交路径使得权值和最小. 分析: 第一次听到“拆点法”这个名词. 把除起点和终点以外的点拆成两个点i和i',然后在这两点之间连一条容量为1,费用为0的边.这样就保证了每个点最多经过一次. 其他有向边的容量也是1 然后求从起点到终点的流量为2(这样就保证了是两条路径)的最小费用流. #include <bits/stdc++.h> using namespace std; + ; ; struct Edge { int from, to, cap…
题意: 一个有v个点的有向图,要从点1到点v需要找两条路径,两路径不可经过同一个点(除了1和v点).求这两条路径的最小费用(保证有解). 分析: 难在建图,其他套模板. 此图给的是超级复杂图,两个点之间有多条有向边,方向还可能是相反的.用网络流来做不能仅靠2点流来保证,因为当只有3个点,4条边都是1->2->3这样的,是不是刚好2条路径?也满足了2点流的限制.其实不能这样,要保证经过每个点1点流量,还得拆点,将2~v-1这些点都拆两个点,两点之间有条费用为0容量为1的边,这样就能保证了.然后源…
一个最小费用最大流的简单建模题: 比赛的时候和小珺合力想到了这个题目的模型: 方法:拆点+边的容量为1 这样就可以保证他们不会在点上和边上相遇了! 感谢刘汝佳大神的模板,让我这个网络流的小白A了这个题. 代码: #include<cstdio> #include<cstring> #include<vector> #include<queue> #define maxn 42005 #define inf 99999 using namespace std;…
拆点费用流 --------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<vector>   #define rep(i,n) for(int i=0;i<…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6171 题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以变为初始状态,若需要的步数大于20,直接输出too difficult,初始状态为: 0  1 1  2 2 2  3 3 3 3  4 4 4 4 4  5 5 5 5 5 5 解法:两种方法,一种是双向BFS+Hash,另外是A*估价+Hash. //双BFS #include <bits/st…
vjudge传送门[here] 题目大意:给一个有(3≤v≤1000)个点e(3≤e≤10000)条边的有向加权图,求1~v的两条不相交(除了起点和终点外没有公共点)的路径,使权值和最小. 正解是吧2到v-1的每个点拆成两个点,中间连一条容量为1,费用为0的边,然后求1到v的流量为2的最小费用流就行了. Code /** * Uva * Problem#1658 * Accepted */ #include<iostream> #include<cstdio> #include&l…
思路: 最大步骤有20,直接BFS会超时. 因为知道开始情况和结果所以可以用双向BFS,每个BFS规定最大步骤为10,这样相加肯定小于20.这里要保存每个状态搜索到的最小步骤,用Hash储存.当发现现有状态已经在另一路出现了,那么就输出两者相加的步骤和. 代码: #include<iostream> #include<algorithm> #include<queue> #include<map> #define ll long long using nam…
题意 给出一个v(3<=v<=1000)个点e(3<=e<=10000)条边的有向加权图,求1-v的两条不相交(除了起点和终点外没有公共点)的路径,使得权和最小. 分析 费用流的一个经典用法就是限制没有公共边边,但是这个题有个不同,这个题限制的是没有公共点.因此,我们把每个点拆出一条边来. 把2到v-1的每个结点i拆成i和i‘两个结点,中间连一条容量为1,费用为0的边.对于原图中的每一条边(a,b),连一条弧(a',b),容量为1,费用为权值然后求1到v的流量为2的最小费用流即可.…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4533 题意: 给出一个v(3≤v≤1000)个点e(3≤e≤10000)条边的有向加权图,求1-v的两条不相交(除了起点和终点外没有公共点)的路径,使得权和最小. 分析: 把2到v-1的每个结点i拆成i和i'两个结点,中间连一条容量为1,费用为0的边,然后求1到v的流量为2的最小费…
一个舰队的目标状态如上图.红色是旗舰.然后给你初始局面,每一次决策可以把旗舰和其上一层或下一层的两个相邻的进行交换.如果能在20步内出解的话,输出最小步数:否则输出“too difficult”. 把每个方块当成0~5的数,整个状态正好可以压缩成1个21位的6进制数,恰好可以用long long存下,可以用set / 哈希表存储. 定义估价函数f(S)表示局面S的每个格子所在层数与它的目标状态所在层的差的绝对值之和. 这样每一次移动最多使这个值减小2,如果这个值大于(20-已经走的步数)*2,则…
题意:给定一个图,求1-n的两条不相交的路线,并且权值和最小. 析:最小费用流,把每个结点都拆成两个点,中间连一条容量为1的边,然后一个作为入点,另一个是出点.最后跑两次最小费用流就行了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cm…
最短路对应费用,路径数量对应流量.为限制点经过次数,拆点为边.跑一次流量为2的最小费用最大流. 最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路. #include<bits/stdc++.h> using namespace std; typedef long long ll; +; +; struct Edge { int v,cap,cost,nxt; void IN(int V,int C,int c,int N) { v = V; cap = C;…
[题意] 现在给出一个三角矩阵,如果0编号的在点(x,y)的话,可以和(x+1,y),(x-1,y),(x+1,y+1),(x-1,y-1)这些点进行交换. 我们每一次只能对0点和其他点进行交换.问最少步数,使得最终变成: 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 [思路] [AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned l…
拆点,每个点拆成 i,i' 在i 和i‘之间连一条费用为0,容量为1的边,就可以保证每个点只经过一次 特殊的点,1和n之间,,,n和2*n之间连一条费用为0,容量为2的边,可以求出两条路径 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<set> #include<map>…
题意:有个N个点M个边的有向加权图,求1~N的两条不相交路径(除了起点和终点外没有公共点),使得权和最小. 解法:不相交?也就是一个点只能经过一次,也就是我后面博文会讲的"结点容量问题".(呃不,写完这博文几天后的今天,我负责任地 m(._.)m 告诉大家,我不会写这博文了......我的时间不多了......          m(_ _::m 大家可以看蓝书.)常用方法就是拆点法,把一个点拆成两个点,中间连一条容量为1.费用为0的边.于是求1到 n 的流量为2的最小费用流就可以了.…
conscious[英][ˈkɒnʃəs][美][ˈkɑnʃəs]consensus[英][kənˈsensəs][美][kənˈsɛnsəs] scious sensuswaterflood; deluge; flood; flowage; Niagara; spill[英][spɪl][美][spɪl]spell[英][spel][美][spɛl] city urban emperemperortemper irritant Some had begun to build adjacent…
MongoDB使用BSON文件存储在collection中,本文主要介绍MongoDB中的写操作和优化策略. 主要有三种写操作:        Create        Update        Delete Create:可以分为两种基本操作——insert和updates with the upsert option Insert() BSON文件最大为16M:_id通常作为主key为了测试写操作是否成功,可以调用getLastError函数{ getLastError: 1 } db.…
Apple公司视觉设计规范 微软公司VI视觉系统 星巴克企业视觉规范手册 DELL品牌VI视觉手册 MTRADING品牌视觉规范 KFC视觉设计规范手册 麦当劳视觉规范 LEGO乐高玩具的品牌视觉规范手册 SONY视觉VI规范 NASA Adidas 福特 Ford Lexus汽车品牌视觉VI HEINEKEN啤酒品牌VI设计规范 Design.INC FEDEX快递公司视觉设计规范 谷歌Chrome浏览器视觉设计规范 Adobe公司视觉设计规范 Adobe Creative Cloud品牌设计…
create database bank; use bank; /* begin table creation */ create table department (dept_id smallint unsigned not null auto_increment, name varchar(20) not null, constraint pk_department primary key (dept_id) ); create table branch (branch_id smallin…
Button ,可以使用 <button> <input> <a>. <input> 中的不同类型,submit , radio , checkbox .还能加上 icon ,split button . Autoconplete 为校准 文本 <input>提供了一个文本选择的菜单.当浏览者开始在<input>中输入时,会自动匹配输入的字符,显示建议. 允许通过箭头按键导航,Enter键选中,Esc键关闭菜单.当箭头键被用来导航时,…