博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 1151
阅读量:5075 次
发布时间:2019-06-12

本文共 1892 字,大约阅读时间需要 6 分钟。

MST ;

不过有 Q种 特殊方案,可以只花费C【i】 (0 < i < Q )

对于方案的选取,可以状态压缩

先直接生成MST ,并把边存起来;

枚举 状态

对于方案, 链接点, 如有剩下的点没有处理; 则剩下的边必会在原MST中的边选;

#include
#include
#include
#include
using namespace std;const int maxn = 1000 + 31;struct Edges{ int x, y; int val; bool operator < (const Edges a) const { return val < a.val; }}E[maxn * maxn]; Edges Line[maxn]; int X[maxn],Y[maxn]; int Cost[maxn], st[10][maxn]; int Cnt,N,Q,Ans; int Pre[maxn]; int Find(int x) { int r = x; while(r != Pre[r]) r = Pre[r]; return Pre[x] = r; } bool Union(int x,int y) { int ax = Find(x); int ay = Find(y); if(ax == ay) return false; Pre[ax] = ay; return true; } void Init() { for(int i = 0; i < maxn; ++i) Pre[i] = i; } void Solve(int Status); int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; bool Jug = false; while(t--) { if(Jug != false) cout <
> N >> Q; for(int i = 0; i < Q; ++i) { cin >> st[i][0] >> Cost[i]; for(int j = 1; j <= st[i][0]; ++j) cin >> st[i][j]; } for(int i = 1; i <= N; ++i) cin >> X[i] >> Y[i]; Cnt = 0; for(int i = 1; i < N; ++i) for(int j = i+1; j <= N; ++j) { E[Cnt].x = i, E[Cnt].y = j; E[Cnt++].val = (X[i]-X[j])*(X[i]-X[j]) + (Y[i]-Y[j])*(Y[i]-Y[j]); } sort(E,E+Cnt); Init(); int ee = 0; Ans = 0; for(int i = 0; i < Cnt; ++i) { if(Union(E[i].x, E[i].y)) { Line[ee] = E[i]; Ans += E[i].val; ee++; } if(ee == N-1) break; } for(int i = 1; i < (1<

转载于:https://www.cnblogs.com/aoxuets/p/4753519.html

你可能感兴趣的文章
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
实验五 Java网络编程及安全
查看>>
32位与64位 兼容编程
查看>>
iframe父子页面通信
查看>>
ambari 大数据安装利器
查看>>
java 上传图片压缩图片
查看>>
magento 自定义订单前缀或订单起始编号
查看>>
ACM_拼接数字
查看>>
计算机基础作业1
查看>>
Ubuntu 深度炼丹环境配置
查看>>
C#中集合ArrayList与Hashtable的使用
查看>>
从一个标准 url 里取出文件的扩展名
查看>>
map基本用法
查看>>
poj-1163 动态规划
查看>>
Golang之interface(多态,类型断言)
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>
Linear Algebra lecture 2 note
查看>>