题意:给定N点,M条有向边,满足任意点可以到达任意点。现在叫你保留2*N边,任然满足任意点可以到达任意点,输出删除的边。

思路:从1出发,DFS,得到一颗生成树,有N-1条边。反向建题。还是从1出发,得到一颗生成树,这2N-2条边显然可以满足任意点互通。然后随便选两边即可。 (任意点u->v,至少有u->1->v满足。

#include<bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
const int maxn=;
using namespace std;
int u[maxn],v[maxn],vis1[maxn],vis2[maxn],N;
vector<int>G1[maxn],G2[maxn];
map<pii,int>mp;
void dfs1(int u)
{
vis1[u]=; int L=G1[u].size();
for(int i=;i<L;i++) if(!vis1[G1[u][i]]) mp[make_pair(u,G1[u][i])]=,dfs1(G1[u][i]);
}
void dfs2(int u)
{
vis2[u]=; int L=G2[u].size();
for(int i=;i<L;i++) if(!vis2[G2[u][i]]) mp[make_pair(G2[u][i],u)]=,dfs2(G2[u][i]);
}
int main()
{
int T,M,i,j;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
mp.clear(); memset(vis1,,sizeof(vis1)); memset(vis2,,sizeof(vis2));
for(i=;i<=N;i++) G1[i].clear(),G2[i].clear();
for(i=;i<=M;i++){
scanf("%d%d",&u[i],&v[i]);
G1[u[i]].push_back(v[i]);
G2[v[i]].push_back(u[i]);
}
dfs1(); dfs2();
int cnt=M-N-N;
for(i=;i<=M&&cnt;i++){
if(!mp[make_pair(u[i],v[i])]) printf("%d %d\n",u[i],v[i]),cnt--;
}
}
return ;
}

Gym-101630C:Connections(生成树&构造)的更多相关文章

  1. codeforces gym 101611C 重链剖分构造

    给一棵树 要求在一个20*1e6的矩阵上放下这棵树,每个点的坐标都是整数且所有边都不相叉 题解 按照重链遍历,先给轻儿子坐标,然后沿着重儿子向下走即可 #include <bits/stdc++ ...

  2. HDOJ--4786--Fibonacci Tree【生成树】

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:给出n个点,m条边,和边的信息. 边有两种颜色,白色和黑色.现要求构造一个生成树.看是否能满足 ...

  3. slot signal机制

    有一个比较 经典的实现:http://sigslot.sourceforge.net/很精简的 signal slot的实现,跨平台.webrtc项目在用,我在自己项目里也用了.这个源码有2000多行 ...

  4. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  5. POJ 1797 kruskal 算法

    题目链接:http://poj.org/problem?id=1797 开始题意理解错.不说题意了. 并不想做这个题,主要是想测试kruskal 模板和花式并查集的正确性. 已AC: /* 最小生成树 ...

  6. prim和kruskal比较

    推荐:http://squirrelrao.iteye.com/blog/1044867  http://www.cnblogs.com/xwdreamer/archive/2011/06/16/22 ...

  7. Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  8. [atARC115D]Odd Degree

    考虑对于一棵树$G$,这个问题的答案-- 当$k$为奇数时答案显然为0,否则从$V$中任选$k$个点,以任意一点为根,从底往上不难发现子图数量唯一 换言之,当$k$为偶数时,每一个合法(恰有$k$个奇 ...

  9. dubbo的消费者是怎么获取提供者服务接口引用的?

    本文主要解读dubbo消费者是如何引用服务端接口的,是如何像本地调用一样调用远程服务的. 并试着从设计者的角度思考,为何这样设计. @Component public class DubboConsu ...

随机推荐

  1. javascript关闭弹出窗体时刷新父窗体和居中显示弹出窗

    居中显示用到了moveTO()方法: 关闭弹出窗时刷新父窗体用到了window.opener方法: 父窗体代码例如以下: <%@ Page Language="C#" Aut ...

  2. IPv4(三)地址掩码

    回顾网络类型确定 回顾一下之前学过的如果确定IP地址网络号,这里先不考虑子网. 首先通过首个八位组字节规则很容易确定IP地址属于那个网络: 如果第1位是0,则是A类地址: 如果前两位是10,则是B类地 ...

  3. ThinkPHP3.1在多数据库连接下存储过程调用bug修正

    最近使用ThinkPHP3.1进行一个项目的开发,由于该项目需要连接多台不同的数据库,所以使用如下配置方法: <?php return array( //'配置项'=>'配置值' //数据 ...

  4. EasyUI触发方法、触发事件、创建对象的格式??

    创建对象 $("选择器").组件名({ 属性名 : 值, 属性名 : 值 }); 触发方法 $("选择器").组件名("方法名",参数); ...

  5. /usr/bin/mysqld_safe_helper: Cannot change uid/gid (errno: 1) (转)

    From: https://www.rootusers.com/how-to-fix-mariadb-10-0-29-selinux-update-failure/ 安装mysql 10.0.29后, ...

  6. diy文件系统上创建文件的流程

    [0]README 0.1) source code are from orange's implemention of a os , and for complete code , please v ...

  7. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  8. IOS简单的渐变绘制

    本文转载至 http://www.cnblogs.com/flychen/archive/2012/09/18/2690264.html 前几个星期项目中的音乐列表左边要添加阴影,做成平滑的效果.如图 ...

  9. IOS获取当前地理位置文本

    本文转载至  http://blog.csdn.net/lvxiangan/article/details/28101119   以下内容摘抄自网络,著作权属于原作者 方法1:使用ios自带联网查询功 ...

  10. EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:bootstrap弹窗功能的实现

    在web前端的网页设计中,为了展示出简洁的网页风格和美观的效果,往往就会使用弹窗效果 在EasyNVR前端页面录像检索功能时,必然会播放录像,如果单独为播放录像文件排一个界面,用户在使用上会更加繁琐, ...