题目链接:https://codeforces.com/problemset/problem/1454/E

题目其实很容易,一开始有点逃避了…
很容易知道n个点,n条边的连通图必有环,如果我们不断的把度数为1的点去掉,直到没有点可以再去除的时候,剩下的点就是在环上的点。
因为是树加一条边,所以直接进行遍历操作的复杂度为O(n),完全不担心时间上的问题。

接下来就是分类讨论了。
1、对于两个点都在环上,那么两点之间有两条路径
2、一个点在环上,一个点在环外,若环外点是环上点的分支,则只有一条路径,否则两条路径
3、环外点与环外点,对于在同一条分支上的点,只有一条路径,在不同分支上则有两条。

因此进行DFS,对每个环上点遍历记录其对应分支上有多少个结点即可。

#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=2e5+5;
typedef long long ll;
vector<int>e[maxn];
bool vis[maxn];
int du[maxn],ans[maxn],num[maxn];int dfs(int x,int fa){int res=0;for(int i=0;i<e[x].size();i++){if(!vis[e[x][i]]||e[x][i]==fa)continue;res+=dfs(e[x][i],x); res++;}return res;
}int main(void){//freopen("in.txt","r",stdin);int t;scanf("%d",&t);while (t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++){e[i].clear();vis[i]=du[i]=0;}for(int i=1;i<=n;i++){int u,v;scanf("%d %d",&u,&v);e[u].push_back(v);e[v].push_back(u);du[u]++;du[v]++;}queue<int>q;for(int i=1;i<=n;i++)if(du[i]==1)q.push(i);while(!q.empty()){int u=q.front(); q.pop();vis[u]=1;for(int i=0;i<e[u].size();i++){du[e[u][i]]--;if(du[e[u][i]]==1)q.push(e[u][i]);}}int tot=0;for(int i=1;i<=n;i++){if(!vis[i]){ans[++tot]=i;num[tot]=dfs(i,-1);}}ll res=1LL*tot*(tot-1);for(int i=1;i<=tot;i++){res+=n-tot-num[i];res+=n-tot;res+=1LL*num[i]*(num[i]-1)/2+1LL*num[i]*(n-tot-num[i]);}printf("%lld\n",res);}return 0;
}

1454E - Number of Simple Paths相关推荐

  1. CodeForces - 1454E Number of Simple Paths(基环树+思维)

    题目链接:点击查看 题目大意:给出一棵 n 个点的基环树,现在需要求所有长度大于等于 1 的路径个数 题目分析:对于所有的路径 ( x , y ) 可以分成下列两种情况来考虑: 路径不会经过环上的边: ...

  2. 数据结构之基环树——骑士,Island,旅行加强版,Number of Simple Paths,Traffic Network in Numazu,Card Game

    文章目录 [ZJOI2008]骑士 [IOI2008] Island [NOIP2018 提高组] 旅行 加强版 CF1454E Number of Simple Paths Traffic Netw ...

  3. Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥

    传送门 文章目录 题意: 思路: 题意: 给你一颗基环树,求长度>=1>=1>=1的路径个数. 思路: 先考虑一棵树,他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2} ...

  4. codeforces round div2,3周赛补题计划(从开学到期末)

    1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...

  5. 【CodeForces】Codeforces Round #686 (Div. 3) CEF

    好久没有div3场了,就去水了一场,队友先看了D,我看了C,队友AC了D题告诉我说简单题,然后我就跳了ABD这三题 C. Sequence Transformation 大致题意 给你一个数列,让你选 ...

  6. Codeforces Round #686 (Div. 3) A-F题解

    Codeforces Round #686 (Div. 3) A-F题解 A. Special Permutation 题意 给定 nnn ,输出一个长度为 nnn 的全排列,每个位置 iii 上的数 ...

  7. poj——3177Redundant Paths

    poj--3177Redundant Paths      洛谷-- P2860 [USACO06JAN]冗余路径Redundant Paths Time Limit: 1000MS   Memory ...

  8. leetcode63. Unique Paths II

    题目要求 Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. H ...

  9. Unique Paths II leetcode java

    题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...

最新文章

  1. 蚂蚁金服-支付风险识别亚军方案!
  2. linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
  3. python 爬虫实例 电影-Python爬虫入门实战之猫眼电影数据抓取(实战篇)
  4. sql2005/sql2000 向表中循环插入100万条记录
  5. [云炬商业计划书阅读分享]无水洗车业 发展前景好
  6. CodeForces - 1457E New Game Plus!(贪心)
  7. 修改Linux系统默认语言
  8. SAP Spartacus lazy load module 里包含了被其他 Component 静态引用的组件该怎么办
  9. P4768 [NOI2018] 归程(kruskal 重构树)
  10. 错误记录:Current request is not a multipart request
  11. 【图论】求无向连通图的割点
  12. python和c先学哪个-C和Python我该先学什么?
  13. 如何在excel中打钩
  14. XUI 熟练使用之(五) -----------底部弹出对话框
  15. 软件测试基础知识【纯知识分享】
  16. 主流微信编辑器对比,最好用的竟然是它!
  17. 计算机考研909考试大纲,山东大学2019年909数据结构考研大纲
  18. 这是一个猜数字的游戏。判断输入的第1个字符,略过其余的字符。
  19. Java:计算圆的面积和周长
  20. 一零一二·三周年·祭

热门文章

  1. runtime suspend
  2. 计算8+88+888+…前10项之和编写应用程序,使用for循环语句计算8+88+888+…前10项之和。(java)
  3. centos破解root密码
  4. 计算机专业英语第04章,2021计算机专业英语第四章
  5. 人生新的开始,组建大数据公司
  6. 基于Python的Web应用开发实战——3 模板
  7. pwd 显示当前目录
  8. zend studio php 错误提示,win7启动Zend Studio弹出错误提示?查看解决方法
  9. 西门子主程序调用子程序_西门子PLC如何在主程序,写入调用子程序的命令?
  10. lougu3906 Geodetic