%%%奎老师

A:傻逼缩点。。。傻逼编译器卡我next。。。

B:就是这道奎老师没讲清楚的题,明明小朋友们都一A嘛,,,明明细节有很多嘛,,,怎么都这么熟练啊。

C:本质还是B,换了个马甲而已。

D:又是缩点,缩完点之后每个入度为1的强连通分量找一下最小值就好啦。。。

I:这就是在求桥了,ok现在来总结一下,有向图中缩点叫强连通分量,求桥与割点,LCA都是在无向图中。然后我又求错了,我在求桥的时候直接算了权值差。。。。看了网上题解,还是乖乖缩点+树形dp吧。。。。QAQ【这里做了双联通之后,就不用求桥啦】有重边,要注意以下。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 50000
using namespace std;
int edgenum,n,edgenew,m,all,flag,tm,bian,ans,id,top;
int jie[N],num[N],p[N],head[N],size[N],vet[N],uu[N],vv[N],yt[N],low[N],dfn[N],a[N],headnew[N],vetnew[N],nextnew[N],stack[N];
void add(int u,int v)
{
  edgenum++;vet[edgenum]=v;jie[edgenum]=head[u];head[u]=edgenum;
}
void tarjan(int u,int fa)
{
  tm++;dfn[u]=low[u]=tm;top++;stack[top]=u;
  ;
  )
  {
    int v=vet[e];
    ){
      flag=;e=jie[e];continue;
    }
    )tarjan(v,u);
    low[u]=min(low[u],low[v]);//printf("low==%d %d\n",u,v);
    e=jie[e];
  }
  if(dfn[u]==low[u]){
    id++;num[id]+=a[u];yt[u]=id;
    while(stack[top]!=u)
    {
      int k=stack[top];yt[k]=id;num[id]+=a[k];
      top--;
    }top--;
  }
}
void Add(int u,int v)
{
  edgenew++;vetnew[edgenew]=v;nextnew[edgenew]=headnew[u];headnew[u]=edgenew;
  //printf("add====%d %d\n",u,v);
}
void dp(int u,int fa)
{
  int e=headnew[u];size[u]=num[u];
  //printf("%d\n",u);
  )
  {
    int v=vetnew[e];//printf("%d\n",v);
    if(v!=fa)dp(v,u),size[u]+=size[v];
    e=nextnew[e];
  }
  )x=-x;
  ans=min(ans,x);
}
int main()
{
  while(scanf("%d%d",&n,&m)!=EOF)
  {
    edgenum=;edgenew=;memset(headnew,,sizeof(headnew));
    memset(head,,,,,sizeof(size));
    all=;tm=;bian=;id=top=;
    memset(low,,,sizeof(dfn));
    ;i<=n;i++)scanf("%d",&a[i]),all+=a[i];int u,v;
    ;i<=m;i++)scanf("%d%d",&u,&v),u++,v++,uu[i]=u,vv[i]=v,add(u,v),add(v,u);
    tarjan(,);
    //for(int i=1;i<=n;i++)printf("id==%d\n",low[i]);
    ){

        printf("impossible\n");continue;
      }
    ;i<=m;i++)
    {
      u=yt[uu[i]],v=yt[vv[i]];
      if(u!=v)Add(u,v),Add(v,u);
    }
    ans=;
    dp(,);
    printf("%d\n",ans);
  }
  ;
 } 

双联通

J: 来自hdu2460.。。。。。网上随手找个std发现都是暴力。。。这个世界太不真诚了。

题意大概是求加上新边后桥的数目。。。。这里需要求LCA。。。和双连通分量。

P:树上的LCA,网上90percent的题解用这种做法都会MLE。。。晕。。。不过最后还是过了,有个蛮坑的点是求自己和自己的lca

  顺便发现自己连倍增法求LCA都忘了。有空练。

T:这个是真的,不作死就不会死。听说这道题在罗oj交过哦,听说我当时还是p党哦。然后由于懒得码就。。。嘿嘿嘿

【noip暑假tarjan专题】的更多相关文章

  1. NOIp 图论算法专题总结 (2)

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 树链剖分 https://oi-wiki.org/graph/heavy-lig ...

  2. NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 最短路 Floyd 基本思路:枚举所有点与点的中点,如果从中点走最短,更新两点间 ...

  3. NOIp 图论算法专题总结 (3):网络流 & 二分图 简明讲义

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 网络流 概念 1 容量网络(capacity network)是一个有向图,图的 ...

  4. NOIP 考前 Tarjan复习

    POJ 1236 给定一个有向图,求: 1) 至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 2) 至少要加多少条边,才能使得从任何一个顶点出发,都能到达全部顶点 第一个就是缩点之后有多少 ...

  5. Tarjan专题

    前排Orz tarjan tarjan算法在图的连通性方面有非常多的应用,dfn和low数组真是奥妙重重(并没有很搞懂反正背就完事了) 有向图强连通分量 #include<iostream> ...

  6. Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

    题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...

  7. 校际联合Contest

    每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...

  8. NOIP赛前集训备忘录(含每日总结)(日更?。。。)

    NOIP赛前集训备忘录(含每日考试总结) 标签: 有用的东西~(≧▽≦)/~啦啦啦 阅读体验:https://zybuluo.com/Junlier/note/1279194 考试每日总结(这个东西是 ...

  9. Collections 索引

    About Me NOIp 数据结构专题总结 NOIp 图论算法专题总结 NOIp 基础数论知识点总结 NOIp 数学知识点总结 搜索算法总结 (不包含朴素 DFS, BFS) 位运算 字符串算法总结 ...

随机推荐

  1. 【XLL API 函数】xlSet

    快速的将常数值放入到单元格区域中. 原型 Excel12(xlSet, LPXLOPER12 pxRes, 2, LPXLOPER12 pxReference,LPXLOPER pxValue); 参 ...

  2. java获取客服端信息(系统,浏览器等)

    String agent = request.getHeader("user-agent"); System.out.println(agent); StringTokenizer ...

  3. XML 数据请求与JSON 数据请求

    (1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...

  4. 读取Spring的配置文件applicationContext.xml的5种方法

    1.利用ClassPathXmlApplicationContext,这种方式配置文件应该放在类包同路径下Java代码: ApplicationContext ct=new ClassPathXmlA ...

  5. JavaScript基础——理解变量作用域

    一旦你开始在JavaScript应用程序中添加条件.函数和循环,就需要理解变量作用域.变量作用域规定了如何确定正在执行的代码行上的一个特定变量名的值. JavaScript允许你既定义全局版本又定义局 ...

  6. iOS开发-正则表达式的使用方法

    前言:在表单验证中,我们经常会使用到正则,因为我们需要用它来判断用户输入的字符是否为合法的,如果是不合法的,那么应该提示用户输入错误,并不让提交至服务器.我们也可以通过正则表达式,从用户输入的字符串中 ...

  7. Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类

    Delphi的参数可以分为:默认参数(传值).var(传址).out(输出).const(常数)四类 可以对比C/C++的相关知识,类比学习. 1.默认参数是传值,不会被改变,例子 function ...

  8. 【翻译十三】java-并发之饥饿与活锁

    Starvation and Livelock Starvation and livelock are much less common a problem than deadlock, but ar ...

  9. Object.create 函数 (JavaScript)

    创建一个具有指定原型且可选择性地包含指定属性的对象. 语法 Object.create(prototype, descriptors) 参数 prototype 必需.  要用作原型的对象.  可以为 ...

  10. jQuery发送ajax请求

    利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...