博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10859 Placing Lampposts / Tree DP
阅读量:7059 次
发布时间:2019-06-28

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

  树DP,要求求出最小覆盖点集,并且要求两端都有覆盖的边尽可能多。于是,这题可以通过赋权,求树的最小权值。无向无环图通过dfs变成有根树一棵,然后对每个树根DP,最后得到答案。

代码如下:

View Code
1 #define REP(i, n) for (int i = 0; i < (n); i++) 2  3 int dp[2][N]; 4 bool vis[N]; 5 VI rel[N]; 6  7 void input(int n, int m) { 8     REP(i, n) { 9         rel[i].clear();10         vis[i] = false;11     }12     int u, v;13     REP(i, m) {14         cin >> u >> v;15         rel[u].PB(v);16         rel[v].PB(u);17     }18 }19 20 void dfs(int x) {21     vis[x] = true;22     dp[0][x] = 0;23     dp[1][x] = 1 << 12;24     REP(i, SZ(rel[x])) {25         int t = rel[x][i];26         if (!vis[t]) {27             dfs(t);28             dp[0][x] += dp[1][t] + 1;29             if (dp[0][t] < dp[1][t]) dp[1][x] += dp[0][t] + 1;30             else dp[1][x] += dp[1][t];31         }32     }33 //    cout << x << " :";34 //    REP(i, SZ(rel[x])) cout << rel[x][i] << ends;35 //    cout << endl;36 //    cout << x << ends << dp[0][x] << ends << dp[1][x] << endl;37 }38 39 int work(int n) {40     _clr(vis);41     int ret = 0;42     REP(i, n) {43         if (!vis[i]) {44             dfs(i);45             ret += min(dp[0][i], dp[1][i]);46         }47     }48     return ret;49 }50 51 int main() {52 //    freopen("in", "r", stdin);53     int T, n, m;54     while (cin >> T) {55         while (T--) {56             cin >> n >> m;57             input(n, m);58             int ans = work(n);59             cout << (ans >> 12) << ' ' << m - (ans & 0x00000FFF) << ' ' << (ans & 0x00000FFF) << endl;60         }61     }62     return 0;63 }

 

——written by Lyon

 

转载于:https://www.cnblogs.com/LyonLys/archive/2013/02/19/uva_10859_Lyon.html

你可能感兴趣的文章
Automatic Truncation of Virtual Log Files(VLFs的自动截断)
查看>>
[Z]寻找第K大的数的方法总结
查看>>
javascript一些常用代码块
查看>>
利用EntityFramework获得双色球数据库
查看>>
IOS4.0与5.0解决键盘的冲突
查看>>
mongo-mapreduce测试(10)——阶段总结(2)
查看>>
Setting an Oracle event:The structure of the trace syntax
查看>>
CSS+DIV:父DIV相对定位+子DIV绝对定位
查看>>
DBCC--SHRINKDATABASE
查看>>
我的开源路声明
查看>>
C# 图像处理:获取鼠标位置信息(全局)
查看>>
angular学习笔记(一)-入门案例
查看>>
jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
查看>>
BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
查看>>
jQuery修改class属性和CSS样式
查看>>
Web.xml配置具体解释之context-param
查看>>
Qt Widgets——抽象按钮及其继承类
查看>>
svn 版本管理与自动部分发布(转)
查看>>
php 上传图片
查看>>
Lambda表达式详解
查看>>