题目大意:

给出一个树的点数N,边数M(M = N - 1) 要求从其中挑出尽可能多的边,挑出来的边不能有共同顶点

输出挑出的边数和挑出的具体是那几条边

题面上说是要按照输入的格式输出那些边

不过亲测如果题目中有输入边1 2,但是你输出 2 1 的话也是会AC的,,

处理鸳鸯输出用一个小小的map的技巧就够了

整个选边的过程中要的思想就是贪心

对于每个点都用一个数组记录当前和这个点相连的未被访问过的点的数量,为1时可以考虑;每次都考虑这样的点,然后选择对应的边,然后处理其他收到影响的点的这个数组的值,这样每次都选只剩一条可选边相连的点,最终会得到最大的选边数量

代码如下:

这是考虑了输出格式的版本= =

不考虑输出格式时间可以减半,内存消耗可以减少一半以上

Result  :  Accepted     Memory  :  15805 KB     Time  :  796 ms

/** Author: Gatevin* Created Time:  2014/7/24 10:14:42* File Name: test.cpp*/
#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cctype>
#include<cmath>
#include<ctime>
#include<iomanip>
using namespace std;
const double eps(1e-8);
typedef long long lint;#define maxn 100010int n,m;
int du[maxn];
bool vis[maxn];
vector <int> G[maxn];
queue <int> q;
vector <pair<int, int> > answer;
map <int, int> M;int main()
{scanf("%d %d",&n,&m);int tmp1, tmp2;memset(vis, 0, sizeof(vis));memset(du, 0, sizeof(du));for(int i = 1; i <= m; i++){scanf("%d %d",&tmp1, &tmp2);M[tmp1*maxn + tmp2] = 1;M[tmp1 + tmp2*maxn] = 0;G[tmp1].push_back(tmp2);G[tmp2].push_back(tmp1);du[tmp1]++;du[tmp2]++;}for(int i = 1; i <= n; i++){if(du[i] == 1)q.push(i);}while(!q.empty()){tmp1 = q.front();tmp2 = 0;q.pop();if(vis[tmp1]) continue;for(unsigned int i = 0; i <= G[tmp1].size() - 1; i++){if(!vis[G[tmp1][i]]){answer.push_back(make_pair(tmp1, G[tmp1][i]));vis[tmp1] = 1;vis[G[tmp1][i]] = 1;tmp2 = G[tmp1][i];break;}}if(tmp2 != 0){for(unsigned int i = 0; i <= G[tmp2].size() - 1; i++){if(!vis[G[tmp2][i]]){du[G[tmp2][i]]--;if(du[G[tmp2][i]] == 1)q.push(G[tmp2][i]);}}}}printf("%d\n",answer.size());for(unsigned int i = 0; i <= answer.size() - 1; i++){if(M[answer[i].first * maxn + answer[i].second])printf("%d %d\n",answer[i].first, answer[i].second);elseprintf("%d %d\n",answer[i].second, answer[i].first);}return 0;
}

URAL 1389 Roadworks 贪心相关推荐

  1. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校,补多校的题目,刷一下一直薄弱的DP.多校如果有计算几何一定要干掉-.- 题意:给 ...

  2. URAL 2045 Richness of words (回文子串,贪心)

    Richness of words 题目链接: http://acm.hust.edu.cn/vjudge/contest/126823#problem/J Description For each ...

  3. URAL 1826 贪心经典题型

    题意:有一个地雷区,n个人要过去,但是只有一个探雷检测器,那么同时最多只能有两个人过去,过去的人必须把探雷器拿回来,每个人过去的速度都不同,总体的速度决定于较慢的那个. 题解:每次,1.要么是 先去两 ...

  4. 模拟+贪心 URAL 1804 The Machinegunners in a Playoff

    题目传送门 题意:A队和B队踢球,已知一场比赛A和B的得分情况,问A最小再得几分就能胜利还有最多能的几分还能给B队一丝翻盘的希望.规则如下: 1. 总分数相等的情况下,在客场得分高的获胜,如果还相等, ...

  5. URAL 1635 Mnemonics and Palindromes

    URAL 1635 思路:区间dp+贪心,先n^2处理出每段区间是否是回文串,然后贪心地找每一段1到i的最少分割. 代码: #include<bits/stdc++.h> using na ...

  6. 贪心算法【区间调度】【背包问题】【集合覆盖】【旅行商问题】【哈夫曼构造价值树】

    贪心算法  在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解.  贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择, ...

  7. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  8. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  9. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  10. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

最新文章

  1. 如何在Debian 8/7上安装PostgreSQL 9.6
  2. 专家:香港拥有人民币资产配置独特优势
  3. RHCE课程-RH253Linux服务器架设笔记五-DNS服务器配置(2)
  4. c语言大力士编程,C语言 编程
  5. linux前台与后台进程调度(ps fg bg)
  6. 【cocos2d-x】瓷砖地图(TileMap)基础知识
  7. open dwg file_体育直播间 | 时隔六年,又一次中韩对决!S10全球总决赛SN对战DWG!...
  8. 树莓派移植SX1278 LoRa通信--使用wiringPiSPI移植SPI通信接口
  9. mysql降级_mysql8降级到mysql5的方法介绍
  10. 拿什么拯救你,我的团队
  11. 三.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---1.项目文件介绍(除主要源码部分)
  12. C++基础——有关引用的问题
  13. 转)TNS协议--翻译自《The Oracle Hackers Handbook》
  14. mysql2014版本下载_Microsoft SQL Server 2014 Express
  15. GitLab配置ssh key:gitlab add an ssh key
  16. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
  17. java hl7_java-发送HL7消息后何时关闭并重新打开套接...
  18. 寿司之神--小野二郎
  19. Android方法数methods超过65536
  20. Webpack(打包工具)

热门文章

  1. Linux系统:page fault
  2. 神经系统的组成结构图谱,神经系统的基本结构图
  3. AP 计算机 一次完美的逆袭
  4. TODA EMS(设备管理系统)简介
  5. 保持积极向上的人生格言
  6. 运筹优化学习07:Lingo的 @if 函数的使用方法
  7. PMIC驱动之—PMIC硬件相关知识
  8. 【论文制图】chemdraw安装与使用
  9. 论文-Interactive Path Reasoning on Graph for Conversational Recommendation
  10. Django 数据迁移导入导出