[Tarjan] BZOJ5201: [NEERC2017]Connections

80人阅读 评论(0) 收藏 举报
分类:

tarjan的时候每次每次加入一条返祖边,都会至少缩去一个点,那么只要记录一下遍历过的边以及返祖边就可以了

#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

const int N=100010;

inline char nc(){
  static char buf[100000],*p1=buf,*p2=buf;
  return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}

inline void read(int &x){
  char c=nc(); x=0;
  for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc());
}

int T,n,m,cnt,G[N],dfn[N],low[N],S[N],vis[N],tk[N],tcnt,top,t;
struct edge{
  int s,t,nx;
}E[N];

inline void addedge(int x,int y){
  E[++cnt].t=y; E[cnt].s=x; E[cnt].nx=G[x]; G[x]=cnt;
}

void dfs(int x){
  dfn[x]=low[x]=++t; vis[x]=1;
  S[++top]=x; int bck=0;
  for(int i=G[x];i;i=E[i].nx){
    if(!vis[E[i].t]){
      dfs(E[i].t),low[x]=min(low[x],low[E[i].t]);
      tk[i]=1,tcnt++;
    }
    if(vis[E[i].t]!=2){
      if(low[E[i].t]<low[x])
    low[x]=low[E[i].t],bck=i;
    }
  }
  if(bck) tk[bck]=1,tcnt++;
  if(low[x]==dfn[x]){
    int u;
    do{
      u=S[top--]; vis[u]=2;
    }while(u!=x && top);
  }
}

int main(){
  freopen("1.in","r",stdin);
  freopen("1.out","w",stdout);
  read(T);
  while(T--){
    read(n); read(m);
    for(int i=1,x,y;i<=m;i++)
      read(x),read(y),addedge(x,y);
    dfs(1);
    for(int i=1;i<=m && tcnt<2*n;i++)
      if(!tk[i]){
    tk[i]=1; tcnt++;
      }
    for(int i=1;i<=m;i++) if(!tk[i]) printf("%d %d\n",E[i].s,E[i].t);
    cnt=t=top=tcnt=0;
    for(int i=1;i<=n;i++) G[i]=dfn[i]=low[i]=vis[i]=0;
    for(int i=1;i<=m;i++) tk[i]=0;
  }
}
查看评论

2017-2018 ACM-ICPC, NEERC解题报告

A. Union of Doubly Linked Lists   模拟链表的合并,注意收尾相接的问题,不少队都A了 B. Preparing for Merge Sort   动态规划,优化才能...
  • qwerty1125
  • qwerty1125
  • 2017-09-20 08:23:34
  • 847

Android超人气系列动态壁纸下载(免费)

欢迎下载哦:  2011黑丝美腿宝贝喷血写真:http://apk.gfan.com/Product/App213027.html 触摸美女第一季: http://apk.gfan.com/Pro...
  • guozh
  • guozh
  • 2012-01-07 12:01:15
  • 801

2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest 组队选拔赛一

Problem C. CodeCoder vs TopForces 题意: 每个人有两个成绩a和b,告诉你n个人的成绩,A能战胜B的条件是A中a或b能够高于B中对应的a或b,或者A不能直接战胜B,但是...
  • aozil_yang
  • aozil_yang
  • 2017-03-27 00:20:26
  • 906

[Tarjan] BZOJ5201: [NEERC2017]Connections

tarjan的时候每次每次加入一条返祖边,都会至少缩去一个点,那么只要记录一下遍历过的边以及返祖边就可以了 #include &amp;lt;cstdio&amp;gt; #include &a...
  • Coldef
  • Coldef
  • 2018-03-07 19:59:35
  • 80

叉姐200题

PublicTransitHard http://community.topcoder.com/stat?c=problem_statement&pm=13797BichromeSky http://...
  • meopass
  • meopass
  • 2017-10-13 10:29:44
  • 488

hdu2874Connections between cities【LCA tarjan】

LCA比较基础的题,而且貌似自己的代码只是MLE而已,结果没问题 ,而且也只是超了一点~ mark一下别人过的 2168MS 21700K 2458B #include #incl...
  • zhou_yujia
  • zhou_yujia
  • 2015-11-27 13:24:21
  • 352

hdu2874_Connections between cities(tarjan/lca/边表)

#include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define...
  • Anna__1997
  • Anna__1997
  • 2017-11-17 12:18:13
  • 83

dp 杂练/专练

最近各种各样的事让我感受到了自己dp是多么弱,于是开始写dp bzoj1055bzoj1055 dp[i][j][k]表示i到j能否缩成kdp[i][j][k]表示i到j能否缩成k 没了//Co...
  • lcrtest
  • lcrtest
  • 2016-06-17 15:38:59
  • 380

CodeForces Gym 101190简要题解

NEERC天天被搬还是做了好了。Abbreviation模拟。#define FIO "abbreviation" #include #define xx first #define yy seco...
  • wxh010910
  • wxh010910
  • 2017-09-08 21:43:04
  • 345

hdoj 2874 Connections between cities 【Tarjan离线LCA】

题目:hdoj 2874 Connections between cities 题意:战争过后,一些城市毁坏了。意思图不连通,让你求任意两点的距离、 分析:很明显求LCA 但是图...
  • y990041769
  • y990041769
  • 2014-11-06 16:57:12
  • 874
    个人资料
    持之以恒
    等级:
    访问量: 10万+
    积分: 5255
    排名: 6493
    文章分类
    最新评论