Placing Lampposts
来源:互联网 发布:unity3d 布料系统demo 编辑:程序博客网 时间:2024/05/16 09:13
树上的DP,有俩个优化条件在照亮所有的路径的情况下使用的路灯的数量最少x1,且在使用灯最少的情况下使得被俩个灯同时照亮的路最多(可以转化为使得只被一个路灯照的路径最少x2),这种优化条件可以用x = M*x1+x2作为目标函数
记忆化搜索
#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <queue>#include <algorithm>#include <vector>#include <cstring>#include <stack>#include <cctype>#include <utility>#include <map>#include <string>#include <climits> #include <set>#include <string> #include <sstream>#include <utility>#include <ctime>//#pragma comment(linker, "/STACK:1024000000,1024000000") using std::priority_queue;using std::vector;using std::swap;using std::stack;using std::sort;using std::max;using std::min;using std::pair;using std::map;using std::string;using std::cin;using std::cout;using std::set;using std::queue;using std::string;using std::istringstream;using std::getline;using std::make_pair;using std::greater; const int MAXN(1010);const int MAXE(2010);const int M(2000);const int INFI((INT_MAX-1) >> 1);int table[MAXN][2];bool vis[MAXN][2];struct EDGE{int v;EDGE *next;};EDGE *first[MAXN];EDGE edge[MAXE];EDGE *rear;void init(){memset(first, 0, sizeof(first));rear = edge;}void insert(int tu, int tv){rear->v = tv;rear->next = first[tu];first[tu] = rear++;}int dfs(int cur, int fs, int f){if(vis[cur][fs])return table[cur][fs];int &ret = table[cur][fs];int temp = 0;for(EDGE *i = first[cur]; i; i = i->next)if(i->v != f)temp += dfs(i->v, 1, cur);temp += M;if(fs == 0 && f != -1)++temp;ret = temp;if(fs == 1 || f == -1){temp = 0;for(EDGE *i = first[cur]; i; i = i->next)if(i->v != f)temp += dfs(i->v, 0, cur);if(f != -1)++temp;ret = min(ret, temp);}vis[cur][fs] = true;return ret;}int main(){int T, n_case(0);scanf("%d", &T);while(T--){int n, m, tu, tv;scanf("%d%d", &n, &m);memset(vis, 0, sizeof(vis));init();for(int i = 0; i < m; ++i){scanf("%d%d", &tu, &tv);insert(tu, tv);insert(tv, tu);}int ans = 0;for(int i = 0; i < n; ++i)if(!vis[i][0])ans += dfs(i, 0, -1);printf("Case %d: %d %d %d\n", ++n_case, ans/M, m-ans%M, ans%M);}return 0;}
- Placing Lampposts
- Placing Lampposts
- Uva-10859-Placing Lampposts
- Placing Lampposts------UVA10859-----DP
- UVA 10859 Placing Lampposts
- [动态规划]Placing lampposts
- uva10859 Placing Lampposts
- Uva10859 - Placing Lampposts
- uvaoj 10859 - Placing Lampposts
- uva10859 - Placing Lampposts
- UVa10895 Placing Lampposts
- UVa 10859 Placing Lampposts
- 【UVA10859】Placing Lampposts
- UVa 10859 Placing Lampposts
- uva10859 - Placing Lampposts(动归)
- UVA--10859--Placing Lampposts--DP
- 10859 - Placing Lampposts(树形dp)
- uva10859 - Placing Lampposts 无根树转有根树 DP
- 深入详解标准C语言 IO
- ArcGIS实用制图技巧——如何制作“阴影”效果
- HTTPSQS_INFO
- 建立虚拟机下 Linux 环境记录
- 关于Android比较好网站
- Placing Lampposts
- ArcGIS实用制图技巧——如何制作“粉饰”效果
- ruby 操作MongoDB
- 关于获取屏幕区域RECT
- Win8 从图片库 选择图片,并上传到应用,设着为背景
- boost正则表达式规则
- ArcGIS实用制图技巧——如何制作“浮雕”效果的多边形
- 基于 Jenkins 平台的二次开发环境设置方法
- jackrabbit注入到spring中的基本操作