URAL1389. Roadworks(dp)
算个简单的树形DP吧 不知道是不是数据太水 竟然一A了
就是对于当前节点有没有被选中就行选最优 有没有被选中的意思是有没有与它相连的边被选中
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
using namespace std;
#define N 100010
vector<int>d[N];
int dp[N][],g;
struct node
{
int u,v;
}p[N];
int dfs(int u,int v,int f)
{
if(dp[v][f]!=-)
return dp[v][f];
int i;
int s[][] = {};
int flag =,x=-;
for(i = ; i < d[v].size() ; i++)
{
int tv = d[v][i];
if(tv==u) continue;
flag = ;
int s1 = dfs(v,tv,);
if(f)
{
s[(i+)%][] = s[i%][]+s1;
}
else
{
int s2 = dfs(v,tv,)+;
s[(i+)%][] = s[i%][]+s1;
if(s[i%][]+s1<s[i%][]+s2)
{
s[(i+)%][] = s[i%][]+s2;
x = tv;
}
else
s[(i+)%][] = s[i%][]+s1;
}
}
if(!flag)
{
return dp[v][f] = ;
}
if(x!=-)
{
g++;
p[g].u = v;
p[g].v = x;
}
int maxz = ;
for(i = ; i < ; i++)
maxz = max(maxz,max(s[][i],s[][i]));
return dp[v][f] = maxz;
}
int main()
{
int i,n,m;
while(cin>>n>>m)
{
memset(dp,-,sizeof(dp));
for(i = ; i <= n ;i++)
d[i].clear();
for(i = ; i <= m ;i++)
{
int u,v;
cin>>u>>v;
d[u].push_back(v);
d[v].push_back(u);
}
dfs(-,,);
cout<<dp[][]<<endl;
for(i = ; i <= g ; i++)
cout<<p[i].u<<" "<<p[i].v<<endl;
}
return ;
}
URAL1389. Roadworks(dp)的更多相关文章
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- zoj 3706 Break Standard Weight(dp)
Break Standard Weight Time Limit: 2 Seconds Memory Limit: 65536 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- poj2479(dp)
题目链接:http://poj.org/problem?id=2479 题意:求所给数列中元素值和最大的两段子数列之和. 分析:从左往右扫一遍,b[i]表示前i个数的最大子数列之和. 从右往左扫一遍, ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- UVA - 1347 Tour(DP + 双调旅行商问题)
题意:给出按照x坐标排序的n个点,让我们求出从最左端点到最右短点然后再回来,并且经过所有点且只经过一次的最短路径. 分析:这个题目刘汝佳的算法书上也有详解(就在基础dp那一段),具体思路如下:按照题目 ...
- 数字三角形/数塔问题(DP入门题)
有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大. 样例输入: 5 13 11 8 12 7 26 6 14 15 8 12 7 ...
随机推荐
- javascript 语法规范错误提示代码
“Missing semicolon.” : “缺少分号.”, “Use the function form of \”use strict\”.” : “使用标准化定义function.”, “Un ...
- 再谈OpenCV
虽然之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/carson2005/article/details/5822149).但依旧有朋友对其不甚了解.所以,常常能碰到有人 ...
- 奥斯卡·王尔德十大经典语录
10不够真诚是危急的,太真诚则绝对是致命的.--摘自<身为艺术家的评论者> "A little sincerity is a dangerous thing, and a gre ...
- activiti自己定义流程之自己定义表单(一):环境配置
先补充说一下自己定义流程整个的思路,自己定义流程的目的就是为了让一套代码解决多种业务流程.比方请假单.报销单.採购单.协作单等等.用户自己来设计流程图. 这里要涉及到这样几个基本问题,一是不同的业务需 ...
- WEB 字体
之前如果想在自己的网站使用某些好看的字体,总是迫不得已得在PS里先把字体图片做好.虽然这样做也能达到我们想要的效果,但是这样就增加了HTTP请求 (如果在多处使用的话),即使合并所有图片,也不好管理, ...
- 设计模式-(10)观察者模式 (swift版)
一,概念 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式.GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它 ...
- NDK编程中如何在C文件中打印调试信息
1,在Android.mk文件中加上 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_PATH := $(call my-dir)include ...
- RK3288以太网的mac地址调试笔记【学习笔记】【原创】
平台信息:内核:linux3.1.0系统:android/android6.0平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:提供以太网mac ...
- Linux 杀死所有进程
方法一: sudo killall -9 netease-cloud-music 这种方法,必须要写全称. sudo netease-cloud-music QStandardPaths: XDG_R ...
- mysql查询表的字符集
mysql查询表的字符集 SHOW CREATE TABLE user;