bzoj1123(割点加路径统计)

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace  std;

typedef long long ll;

struct my{
  int next;
  int v;
};

const int maxn=100000+10;
ll low[maxn],dfsn[maxn],size_[maxn],adj[maxn],fa,dfn,root,ans[maxn];
my bian[maxn*10];
bool cut[maxn];
int m,n;

void myinsert(int u,int v){
     bian[++fa].v=v;
     bian[fa].next=adj[u];
     adj[u]=fa;
}

void tarjan(ll x){
     dfsn[x]=low[x]=++dfn;
     ll ch=0,sum=0;
     size_[x]=1;
     for (int i=adj[x];i;i=bian[i].next){
        ll v=bian[i].v;
        if(!dfsn[v]){
            tarjan(v);
            size_[x]+=size_[v];
            low[x]=min(low[x],low[v]);
            if(dfsn[x]<=low[v]){
                ch++;
                ans[x]+=size_[v]*(n-size_[v]);
                sum+=size_[v];
                if(root!=x||ch>1){
                    cut[x]=1;
                }
            }
        }
        else low[x]=min(low[x],dfsn[v]);
     }
     if(cut[x]) ans[x]+=(n-sum-1)*(sum+1)+(n-1);
     else ans[x]=2*(n-1);
}

int main(){
    int u,v;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++){
        scanf("%d%d",&u,&v);
        myinsert(u,v);
        myinsert(v,u);
    }
    for (int i=1;i<=n;i++){
        if(!dfsn[i]){
            root=i;
            tarjan(i);
        }
    }
    for (int i=1;i<=n;i++){
       printf("%lld\n",ans[i]);
    }
return 0;
}

原文地址:https://www.cnblogs.com/lmjer/p/8678317.html

时间: 2024-11-13 18:17:55

bzoj1123(割点加路径统计)的相关文章

洛谷——P1608 路径统计

P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为“1”的小镇上,而送餐的地点在标注为“N”的小镇.(有点废话)除此之外还知道这些道路都是单向的,从小镇I到J需要花费D[I,J]的时间,为了更高效快捷的将快餐送到顾客手中, 他们想走一条从小镇1到小镇N花费最少的一条路,但是他们临出发前,撞到因为在路上堵车而生气的FYY,深受启

加粉统计,来粉统计,微信号复制统计,微信号在线管理!关键词复制统计!网页监控!免费注册使用!

加粉统计,微信号复制统计,关键词复制统计工具,微信号在线管理等工具. 可以去官网查看详细的介绍:这里叫大家如何快速使用:官网链接: www.zaax.top目前免费注册,免费使用一个月,而且功能无限制,只是免费版的开放的数量比较少.付费版价格也是明码标价,可以根据自己推广的链接需求选择对应的版本. 目前有4大功能: 一. 微信号加粉统计,复制统计功能 统计网页上的微信号或者关键词的是否复制过, 统计用户复制微信好后是否打开微信, 统计用户搜索词统计复制的情况, 统计访问的地区统计复制的情况, 统

键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:&quot;java&quot;,&quot;txt&quot;)作为key, 用个数作为value,放入到map集合中,遍历map集合

package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Scanner;import java.util.Set; /** 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt&qu

某模拟赛C题 树上路径统计 (点分治)

题意 给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权.定义一条路径的价值为路径上的点权和-路径上的点权最大值. 给定参数P,我!=们想知道,有多少不同的树上简单路径,满足它的价值恰好是P的倍数. 注意:单点算作一条路径:u!=v时,(u,v)和(v,u)只算一次. 题解 树上路径统计,解法是点分治.点分的时候求出根到每个点路径最大值和权值和.排一序,然后开个桶,就能计算了.去重就套路的减去没棵子树里面的答案. CODE #include <bits/stdc++.h> using

洛谷 P1608 路径统计

题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为“1”的小镇上,而送餐的地点在标注为“N”的小镇.(有点废话)除此之外还知道这些道路都是单向的,从小镇I到J需要花费D[I,J]的时间,为了更高效快捷的将快餐送到顾客手中, 他们想走一条从小镇1到小镇N花费最少的一条路,但是他们临出发前,撞到因为在路上堵车而生气的FYY,深受启发,不能仅知道一条路线

每周一道算法题010:扫地机器人路径统计

问题: 假设有一款不会反复清扫同一个地方的机器人,它只能前后左右移动.举个例子,如果第1次向后移动,那么连续移动3次时,就会有以下9种情况(图6).又因为第1次移动可以是前后左右4种情况,所以移动3次时全部路径有9×4=36种. 求这个机器人移动12次时,有多少种移动路径? 思路: 尝试用递归和非递归两种办法来解. 递归思路:从起点开始,在各方向移动1步,如果移动后的点不在当前的路径中,就加入到当前路径中,并进行下一次移动,当移到到指定的N步时,退出,并计数加1,视为找到一条路径. 非递归思路:

luogu P1608 路径统计

题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方,而且他们目前处在标注为“1”的小镇上,而送餐的地点在标注为“N”的小镇.(有点废话)除此之外还知道这些道路都是单向的,从小镇I到J需要花费D[I,J]的时间,为了更高效快捷的将快餐送到顾客手中, 他们想走一条从小镇1到小镇N花费最少的一条路,但是他们临出发前,撞到因为在路上堵车而生气的FYY,深受启发,不能仅知道一条路线

移动分发端 基础统计指标经典业务代码节选--功能路径统计

描绘产品所有用户的访问的功能路径树,话就不多说,闷得慌 sql 代码 ALTER procedure [dbo].[PR_StatFuncPath](@statdate int) as  begin declare @today datetime; set @today=CAST(convert(varchar(8),@statdate) as datetime); declare @yestoday datetime; set @yestoday=dateadd(DAY,-1,@today);

vue加百度统计代码(亲测有效)

申请百度统计后,会得到一段JS代码,需要插入到每个网页中去,在Vue.js项目首先想到的可能就是,把统计代码插入到index.html入口文件中,这样就全局插入,每个页面就都有了;这样做就涉及到一个问题,Vue.js项目是单页应用,每次用户浏览网站时,访问内页时页面是不会刷新的,也就意味着不会触发百度统计代码:所以最终在百度统计后台看到的效果就是只统计到了网页入口的流量,却无法统计到内页的访问流量. 解决方法 在main.js文件中调用vue-router的afterEach方法,将统计代码加入