E. Number of Simple Paths 题解(思维)
题目链接
题目大意
给你n个点(\(\sum n<=2e5\)),n条边,求有多少条路径
题目思路
要明白任意两点的路径只能是1条或者2条
先topo找环(双向边也是可以找的)
然后把环上的每个点当作一棵树的根,dfs求每棵树的节点
设第一颗树的节点为tree[i]...以此类推
pre[i]=tree[1]+.....tree[i-1]+tree[i]
显然若两点位于不同子树,则路径为2,位于同一子树则路径为1
代码
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n;
int head[maxn],cnt,deg[maxn];
bool vis[maxn];
vector<int> vec;
int tree[maxn];
int pre[maxn];
struct edge{
int to,next;
}e[maxn<<1];
void add(int u,int v){
e[++cnt]={v,head[u]};
head[u]=cnt;
deg[v]++;
}
void topo(){
queue<int> que;
for(int i=1;i<=n;i++){
if(deg[i]==1){
que.push(i);
}
}
while(!que.empty()){
int x=que.front();
que.pop();
for(int i=head[x];i;i=e[i].next){
deg[e[i].to]--;
if(deg[e[i].to]==1){
que.push(e[i].to);
}
}
}
}
void dfs(int id,int son,int fa){
tree[id]++;
for(int i=head[son];i;i=e[i].next){
if(e[i].to==fa||vis[e[i].to]) continue;
dfs(id,e[i].to,son);
}
}
void init(){
vec.clear();
cnt=0;
for(int i=1;i<=n;i++){
deg[i]=tree[i]=head[i]=vis[i]=0;
}
}
int main(){
int _;scanf("%d",&_);
while(_--){
scanf("%d",&n);
init();
for(int i=1,u,v;i<=n;i++){
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
}
topo();
for(int i=1;i<=n;i++){
if(deg[i]>=2){
vis[i]=1;
vec.push_back(i);
}
}
int tot=0;
for(int i=0;i<vec.size();i++){
dfs(++tot,vec[i],vec[i]);
}
for(int i=1;i<=tot;i++){
pre[i]=pre[i-1]+tree[i];
}
ll ans=0;
for(int i=1;i<=tot;i++){
ans+=1ll*tree[i]*(tree[i]-1)/2+1ll*2*(tree[i])*(pre[tot]-pre[i]);
}
printf("%lld\n",ans);
}
return 0;
}
E. Number of Simple Paths 题解(思维)的更多相关文章
- Codeforces Round #686 (Div. 3) E. Number of Simple Paths (思维,图,bfs)
题意:有一个\(n\)个点,\(n\)条边的图,问你长度至少为\(1\)的简单路径有多少条. 题解:根据树的性质,我们知道这颗树一定存在一个环,假如一棵树没有环,那么它的所有长度不小于\(1\)的简单 ...
- [JZOJ5280]膜法师题解--思维+前缀和
[JZOJ5280]膜法师题解--思维+前缀和 题目链接 暴 力 过 于
- D - Number of Multisets 题解(思维dp)
题目链接 题目大意 给你一个数k和n,表示用n个\(1/2^i(i=0,1,2.....)\)组成k有多少种方案数 题目思路 这个dp实属巧妙 设\(dp[i][j]表示i个数构成j\) 这i个数可以 ...
- Ural 2003: Simple Magic(数论&思维)
Do you think that magic is simple? That some hand-waving and muttering incomprehensible blubber is e ...
- Lintcode249 Count of Smaller Number before itself solution 题解
[题目描述] Give you an integer array (index from 0 to n-1, where n is the size of this array, data value ...
- CF293B Distinct Paths题解
CF293B Distinct Paths 题意 给定一个\(n\times m\)的矩形色板,有kk种不同的颜料,有些格子已经填上了某种颜色,现在需要将其他格子也填上颜色,使得从左上角到右下角的任意 ...
- [NOIP10.6模拟赛]1.merchant题解--思维+二分
题目链接: while(1)gugu(while(1)) 闲扯 考场上怕T2正解写挂其他两题没管只打了暴力,晚上发现这题思维挺妙的 同时想吐槽出题人似乎热衷卡常...我的巨大常数现在显露无疑QAQ 分 ...
- [NOIP10.5模拟赛]3.c题解--思维
题目链接 这次不咕了 https://www.luogu.org/problemnew/show/AT2389 闲扯 考场20分爆搜走人 \cy 话说这几天T3都很考验思维啊 分析 我们先钦定一只鸡( ...
- [NOIP10.4模拟赛]3.z题解--思维
题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...
随机推荐
- Redis学习笔记(四)——数据结构之List
一.介绍 Redis列表(List)是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(left)或者尾部(right),一个列表最多可以包含232-1个元素(4294967295, ...
- Spark为什么只有在调用action时才会触发任务执行呢(附算子优化和使用示例)?
Spark算子主要划分为两类:transformation和action,并且只有action算子触发的时候才会真正执行任务.还记得之前的文章<Spark RDD详解>中提到,Spark ...
- GPRS DTU设备常见的问题分析
在GPRS DTU设备使用的过程中,经常会遇到各种各样的问题,今天就为大家来分析一下在GPRS DTU设备使用时会遇到的一些问题. 1.GPRS模块设置 a.检查串口参数是否与GPRS模块的工作参数一 ...
- nextInt()和nextLine()连用报错
当nextInt(),next(),nextDouble(),nextFloat()方法与nextLine()连用并放在nextLine()前面时,会出现下面的错误: Exception in thr ...
- 模板——Splay
$Splay$ #include <bits/stdc++.h> #define inf (int)1e9 using namespace std; const int N=1e5+100 ...
- 8、Django之模型层第三篇:更多字段与参数
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- excel导出csv包括逗号等的处理
/** * @Title: trimRubbishChar * @Description: 导出的时候需要对一格的内容进行检查,看是否有非法字符,以免串行 * @Since: 2016年8月2日 下午 ...
- 我发现了一个特别Man的Linux工具!!!
Linux命令不用我多说吧,谁还不会几个?但是一个命令可能有几十种用法,就拿最简单也是最常用的ls来举例,它就有将近20种options用法 比如 ls -a :现实所有文件及其隐藏文件 ls -t ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
- 异常记录-Gradle依赖掉坑之旅
前言 最近在项目中遇到了一个问题,死活拉不下来依赖,耗费了一整天,感觉自己真是菜的抠脚. 没想到今天脑子一清醒,刷刷的问题逐个击破了. 问题描述: 项目成员添加了新的依赖,然后我这边项目拉下来,bui ...