博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 1218 完美的服务
阅读量:6637 次
发布时间:2019-06-25

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

题目链接:

题意:

一个网络,选出一些点做服务器,使满足一些条件,求服务器最少数量。条件是,每个计算机恰有一台服务器相连。

 

分析:

对于每个节点,都有3种状态,1、他是服务器 d(u,0),2、他不是服务器,但是父亲是的 d(u,1),如果他父亲是服务器,将影响他的接下来的决策。3、他不是服务器,父亲也不是服务器 d(u,2);

那么: 

d(u,0) = sum{max{d(v,0),d(v,1)}};

d(u,1) = sum{d(v,2)};

d(u,2) 子节点恰有一台是服务器,可以利用 上面的求出, d(u,2) = min{d(u,1)-d(v,2)+d(v,0)};

 

建树时,可以以任一点为根。

 

#include 
using namespace std;#define maxn 10005#define INF 0x3f3f3f3fint n;vector
G[maxn],vertices;int p[maxn],d[maxn][3];//建树void dfs(int u,int fa) { vertices.push_back(u); p[u] = fa; for(int i=0;i
=0;i--) { int u = vertices[i]; d[u][0] = 1; d[u][1] = 0; for(int j=0;j
INF) d[u][0] = INF; if(d[u][1]>INF) d[u][1] = INF; } d[u][2] = INF; for(int j=0;j
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/6004069.html

你可能感兴趣的文章
程序中设置MySQL的默认值
查看>>
Android图片加载库的理解
查看>>
myeclipse10配置maven和一些常用命令
查看>>
avalonJS-源码阅读(前)
查看>>
ES权威指南[官方文档学习笔记]-40 cheaper in bulk
查看>>
iframe自适应高度
查看>>
centos7 mysql/mariadb安装
查看>>
关于/etc/ld.so.conf
查看>>
微信登录
查看>>
判断界面是否加载完毕执行事件
查看>>
MYSQL中存储过程的创建,调用及语法
查看>>
献给80后为结婚的朋友们(爱情男女通用版)
查看>>
Oracle密码忘记
查看>>
Pipeline as Code with Jenkins
查看>>
Symantec Backup Exec部署手册
查看>>
read命令的使用
查看>>
https支持
查看>>
学习Linux系统的态度及技巧
查看>>
设计模式——代理模式(Proxy Pattern)
查看>>
图表控件FlowChart.NET详细介绍及免费下载购买地址
查看>>