Gym - 101334C 3514 无向仙人掌
http://codeforces.com/gym/101334/attachments
题意:

判断是否是仙人掌图并且连通,如果是的话则计算出它有多少个连通子图也是仙人掌。
思路:
连通子图也就是我们要考虑哪些边是可以删的,因为要考虑连通,那么只能删环上的边,而且一个环只能删一条边,删多了就不连通了。
那么对于每个环,它有多少条边,我们就有多少种删法,因为每个环都是独立的,那么计算数量就是要利用乘法原理。
我们要做的就是计算出每个环的边数和判断是否连通。
这个用相对时间戳来做,也就是dfn【v】=dfn【u】+1,成环的判断条件还是一样的,dfn【v】<dfn【u】。这种做法的话就可以在找环的时候计算出了边数。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF=0x3f3f3f3f3f;
const int maxn=+; vector<int> G[maxn]; int n,m;
int cycle_num;
int c[maxn],dfn[maxn];
int cycle[maxn];
int ans[maxn]; void dfs(int u,int fa)
{
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(v==fa) continue;
if(!dfn[v])
{
dfn[v]=dfn[u]+;
dfs(v,u);
c[u]+=c[v];
}
else if(dfn[v]<dfn[u])
{
cycle[cycle_num++]=dfn[u]-dfn[v]+;
c[u]++;
c[v]--;
}
}
} void cacl_num()
{
int len=;
ans[len]=;
for(int i=;i<cycle_num;i++)
{
for(int j=;j<=len;j++)
ans[j]*=cycle[i];
for(int j=;j<=len;j++)
{
ans[j+]+=ans[j]/;
ans[j]%=;
}
while(ans[len+])
{
ans[len+]=ans[len+]/;
ans[++len]%=;
}
}
for(int i=len;i>=;i--)
printf("%d",ans[i]); } void solve()
{
memset(c,,sizeof(c));
memset(ans,,sizeof(ans));
memset(dfn,,sizeof(dfn));
memset(cycle,,sizeof(cycle));
cycle_num=;
dfn[]=;
dfs(,-);
for(int i=;i<=n;i++)
{
if(dfn[i]==||c[i]>)
{
puts("");
return;
}
}
cacl_num();
} int main() {
freopen("cactus.in","r",stdin);
freopen("cactus.out","w",stdout);
//freopen("D:\\input.txt","r",stdin);
int kas=;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n;i++) G[i].clear();
if(kas++) puts(""); while(m--)
{
int u,v,k;
scanf("%d",&k); k--;
scanf("%d",&u);
while(k--)
{
scanf("%d",&v);
G[u].push_back(v);
G[v].push_back(u);
u=v;
}
} solve();
}
return ;
}
Gym - 101334C 3514 无向仙人掌的更多相关文章
- HDU 6041.I Curse Myself 无向仙人掌图
I Curse Myself Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- Gym 101334C 无向仙人掌
给出图,求他的“仙人掌度”,即求包括他自身的生成子图有多少? 只能删去仙人掌上的叶子的一条边,然后根据乘法原理相乘: 1.怎么求一个仙人掌叶子上有多少边? 可以利用点,边双连通的时间戳这个概念,但是绝 ...
- $dy$讲课总结
字符串: 1.广义后缀自动机(大小为\(m\))上跑一个长度为\(n\)的串,所有匹配位置及在\(parent\)树上其祖先的数量的和为\(min(n^2,m)\),单次最劣是\(O(m)\). 但是 ...
- codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径
题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...
- Gym 100553B Burrito King 无脑背包
题意就是你有n和m两个上限 吃一个东西会同时增加两个东西 m的值不能超过给定的m 问最后的n m值和每个东西吃了多少 贪心一下就好了 算一下性价比 从最大的开始吃 直到吃满了m n也一定是最大了 只是 ...
- 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...
- 【BZOJ-1952】城市规划 [坑题] 仙人掌DP + 最大点权独立集(改)
1952: [Sdoi2010]城市规划 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 73 Solved: 23[Submit][Status][ ...
- 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集
4316: 小C的独立集 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 57 Solved: 41[Submit][Status][Discuss] ...
- (转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地
[重磅]无监督学习生成式对抗网络突破,OpenAI 5大项目落地 [新智元导读]"生成对抗网络是切片面包发明以来最令人激动的事情!"LeCun前不久在Quroa答问时毫不加掩饰对生 ...
随机推荐
- codeforce 148D. Bag of mice[概率dp]
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- CVE-2018-2628 weblogic WLS反序列化漏洞--RCE学习笔记
weblogic WLS 反序列化漏洞学习 鸣谢 感谢POC和分析文档的作者-绿盟大佬=>liaoxinxi:感谢群内各位大佬及时传播了分析文档,我才有幸能看到. 漏洞简介 漏洞威胁:RCE-- ...
- PHP一句话木马小总结与SQL语句写一句话木马
一.基础类的一句话--功能仅限于验证漏洞了,实际中太容易被查出出来: <?php @eval($_GET["code"])?> <?php @system($_P ...
- Android 让GridView的高度为Wrap_content根据内容自适应高度
From:http://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/ 如果把Grid ...
- Swift - 点击箭头旋转
let arrowImage = UIImageView(image: UIImage(named: "Machine_arrow")!.imageWithRenderingMod ...
- SElinux以及防火墙的关闭
[root@localhost targeted]# pwd/etc/selinux/targeted[root@localhost targeted]# getsebool -a|grep samb ...
- pta 习题集5-17 哥尼斯堡的“七桥问题”
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决 ...
- 焦作网络赛B-Mathematical Curse【dp】
A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics ...
- Oracle HA 之ADVM和ACFS
--ADVM ADVM主要是为了使除了数据库之外的第三方应用程序也可以使用asm存储,这样不限于使asm局限于自家的数据库领域.要想使用ADVM首先必须安装grid,已经创建好了asm磁盘,asm磁盘 ...
- Integer.valueof 和 Integer.parseInt
System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); System.out.p ...