bzoj1601】的更多相关文章

灌水 bzoj-1601 题目大意:给你n块地,将两块地之间连通有代价$P_{i,j}$,单独在一块地打井需要代价$C_i$,问将所有的井都有水的代价是多少. 注释:1<=n<=300. 想法:这种题做过一遍就好了,我们新建立一个0号节点.如果两块地之间打通就在这两个点之间连边.如果这个点单独打井就将这个点与新建节点连边,权值为打井代价.然后跑最小生成树.首先我们知道,这n块地中至少有一块地是打井的,不然就算所有的点都连通,也是没有水的.所以,这个强大的算法显然是正确的. 最后,附上丑陋的代码…
题目:http://hzwer.com/1158.html 分析: 解法很巧妙,弄一个超级源,对某个点装水井相当于把这个点连向超级源,边权为这个点的点权,然后跑最小生成树就行了…
经典延伸最小生成树问题... #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memset(x,c,sizeof(…
Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Farmer John所需的最少代价. Input *第一行:一个数n *第二行到第n+1行:第i+1行含有一个数wi *第n+2行到…
Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Farmer John所需的最少代价. Sulotion 直接搞好像不太好做?于是新设一个点,作为总水源,和i点边权为wi,然后直接求…
题解: 简单生成树 代码: #include<bits/stdc++.h> using namespace std; ; int n,dis[N],f[N],a[N][N],ans; int main() { scanf("%d",&n); ;i<=n;i++)scanf("%d",&dis[i]); ;i<=n;i++) ;j<=n;j++)scanf("%d",&a[i][j]); ;i&…
P1550 [USACO08OCT]打井Watering Hole   对于自己建水库的情况,新建一个虚拟结点,和其他点的边权即为自建水库的费用 这样问题就转化为一个裸最小生成树问题了. 这里用堆优化prim解决. #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #include<queue> #define re register using name…
1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2121  Solved: 1393[Submit][Status][Discuss] Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. 建造一个水库需要花费wi(1<=wi<=100000),连接两块土…
1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 1589  Solved: 1035 [Submit][Status][Discuss] Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田.农田被数字1到n标记.把一块土地进行灌水有两种方法.从其它农田饮水,或者这块土地建造水库. 建造一个水库须要花费wi(1<=wi<=100000),连接两…
难点:找到正确方式建图 知识点:Kruskal 分析:这种题肯定要把点权转换到边权上,但肯定无法搞到和其他点相连的边上,怎么办呢?那就再造一个点呗,这个“超级点”和所有点相连,且边权=点权,于是就可以消除点权对选择的影响,代码实现很简单,思路不好想 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; inline int…