题意:给定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. Laravel 5.4---后端数据分页和前端显示分页结果

    后端数据(Eloquent 模型)分页 事先建立好Eloquent 模型和Controller 还有 前台的View.可以参考我之前的文章:Laravel建站03--建立前台文章列表和文章详情 在co ...

  2. Redis(十):使用RedisTemplate执行Redis脚本

    对于Redis脚本使用过的同学都知道,这个主要是为了防止竞态条件而用的.因为脚本是顺序执行的.(不用担心效率问题)比如我在工作用,用来设置考试最高分. 如果还没有用过的话,先去看Redis脚本的介绍, ...

  3. Django之信息聚合

    feeds.py #coding:utf-8 __author__ = 'similarface' from django.contrib.syndication.views import Feed ...

  4. hadoop 出现FATAL conf.Configuration: error parsing conf file,异常

    FATAL conf.Configuration: error parsing conf file: com.sun.org.apache.xerces.internal.impl.io.Malfor ...

  5. EntityFramwork 查询

    EntityFramwork 查询 1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: // ...

  6. java基本类型和包装类的区别(转)

    int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数 ...

  7. JAVA数据类型(转)

     java中数据的基本类型分为: 基本数据类型和引用数据类型,对此不多介绍:   接下来讨论一下java中数据类型存储在哪     基本数据类型存储在哪,取决于基本类型在哪声明:          1 ...

  8. PCA tries to preserve linear structure, MDS tries to preserve global geometry, and t-SNE tries to preserve topology (neighborhood structure)

    https://colah.github.io/posts/2014-10-Visualizing-MNIST/

  9. Android笔记之引用aar

    把要引用的aar文件复制到目录app\libs中(我要引用的aar名为xybigdatasdk-release-out2.2.6.aar) 在build.gradle (Module: app)中添加 ...

  10. 【24题】P2766最长不下降子序列问题

    网络流二十四题 网络流是个好东西,希望我也会. 网络流?\(orz\ zsy!!!!!\) P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(d ...