Gym 101334C 无向仙人掌


给出图,求他的“仙人掌度”,即求包括他自身的生成子图有多少?
只能删去仙人掌上的叶子的一条边,然后根据乘法原理相乘;
1、怎么求一个仙人掌叶子上有多少边? 可以利用点,边双连通的时间戳这个概念,但是绝对时间是不对的,只能用相对的时间戳。
2、怎么把第二种情况剔除掉? 就是记录每一个点加入环中的次数;
3、第三种情况,就是判连通了;
#include <bits/stdc++.h>
using namespace std;
const int maxn = + ;
struct Sol {
vector<int> G[maxn];
int cyclecnt;
int cycle[maxn];
int dfn[maxn];
int c[maxn];
int n;
int num[maxn];
void init(int n) {
this->n = n;
for(int i=; i<=n; i++)
G[i].clear();
memset(dfn,,sizeof(dfn));
memset(cycle,,sizeof(cycle));
memset(num,,sizeof(num));
cyclecnt = ;
dfn[] = ;
}
void AddEdge (int from,int to) {
G[from].push_back(to);
G[to].push_back(from);
}
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[cyclecnt++] = dfn[u] - dfn[v] + ;
c[u]++;
c[v]--;
}
}
}
void ans() {
for(int i=; i<=n; i++)
if(c[i]>||dfn[i]==) {
puts("");
return;
}
//int res = 1;
//for(int i=0;i<cyclecnt;i++)
// res = res * cycle[i];
//return res;
int len = ;
num[] = ;
for(int i=; i<cyclecnt; i++) {
for(int j=; j<=len; j++)
num[j] = num[j]*cycle[i];
for(int j=; j<=len; j++) {
num[j+] += num[j]/;
num[j] = num[j]%;
}
while(num[len+]) {
num[len+]+=num[len+]/;
num[++len]%=;
}
}
for(int i=len; i>=; i--)
printf("%d",num[i]);
puts("");
}
} sol;
int main() {
freopen("cactus.in","r",stdin);
freopen("cactus.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
sol.init(n);
for(int i=; i<m; i++) {
int k,u;
scanf("%d%d",&k,&u);
for(int i=; i<k-; i++) {
int v;
scanf("%d",&v);
sol.AddEdge(u,v);
u = v;
}
}
sol.dfs(,-);
sol.ans();
//printf("%d\n",sol.ans());
return ;
}
Gym 101334C 无向仙人掌的更多相关文章
- HDU 6041.I Curse Myself 无向仙人掌图
I Curse Myself Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- Gym - 101334C 3514 无向仙人掌
http://codeforces.com/gym/101334/attachments 题意: 判断是否是仙人掌图并且连通,如果是的话则计算出它有多少个连通子图也是仙人掌. 思路:连通子图也就是我们 ...
- $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答问时毫不加掩饰对生 ...
随机推荐
- Android 中判断网络状态
首先在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_ ...
- baidumapapi点线面的绘制已离线化
百度API离线化 baidumapapi2.0商用是要收费的,开发者使用也要申请个Key. 有个项目要用到点线面的绘制功能,在百度的API示例中发现有这样js封装(DrawingManager_min ...
- 深入redis内部之redis启动过程之一
redis作为一个服务器,它的启动是从main函数开始的.redis.c 1. 进程重命名 #ifdef INIT_SETPROCTITLE_REPLACEMENT spt_init(argc, ar ...
- nyoj 456——邮票分你一半——————【背包思想搜索】
邮票分你一半 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分 ...
- HDU 1754——I Hate It——————【线段树单点替换、区间求最大值】
I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- C#请求http向网页发送数据,网页接收
首先,我们需要的是什么东西? 用POST方式请求http,给网页传输数据,网页接收到数据之后,把数据存储到数据库中. 1.首先请求http,建立连接,把转码过的数据传输过去 2.网页接收数据,在转码之 ...
- java中json解析,xml解析
抓取网页内容,会返回json或者xml(html)格式的数据. 为了方便的对上述两种格式的数据进行解析,可采用解析工具. JsonPath https://github.com/jayway/Json ...
- 02.ArrayList和HashTable
ArrayList集合 数组的缺点: (1).数组只能存储相同类型的数据. (2).数组的长度要在定义时确定. 集合的好处: (1).集合可以存储多种不同类型的数据. (2).集合的长度是可以任意改变 ...
- Web开发HTTP中URI和URL的情感纠葛
作者:郭无心链接:https://www.zhihu.com/question/21950864/answer/66779836来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- python中操作列表
1.遍历列表 可以用for循环遍历打印非常实用 摸板: for 临时变量 in 列表 : print(临时变量) 注意缩进 , 注意冒号 2.创建数值列表 (1)使用range()函数 , 函数的范围 ...