点仙人掌(cactus)

时间限制: 1 Sec 内存限制: 512 MB


题解
n k 3 nk^3 nk3的暴力,在树上做树形 d p dp dp
C o d e : Code: Code

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int mod=1e9+7,N=1e6+5;
int cnt,id,belong[N],n,m,top,K,ans,ti,head[N],dfn[N],low[N];
int stack[N],instack[N],S[10005][31],F[10005][31],A[N],B[35];
vector<int> vec[N];
struct node
{
	int vet,next;
}edge[N];
void add(int u,int v)
{
	edge[++cnt].vet=v;
	edge[cnt].next=head[u];
	head[u]=cnt;
}
void Tarjan(int x,int fa)
{
	dfn[x]=low[x]=++ti;
	stack[++top]=x;
	instack[x]=1;
	for(int i=head[x];i;i=edge[i].next)
	{
		int V=edge[i].vet;
		if(V==fa)continue;
		if(!dfn[V])
		{
			Tarjan(V,x);
			low[x]=min(low[x],low[V]);
		}else if(instack[V])
			low[x]=min(low[x],dfn[V]);
	}
	if(low[x]==dfn[x])
	{
		int u=-1;
		id++;
		while(u!=x)
		{
			u=stack[top--];
			vec[id].push_back(u);
			belong[u]=id;
			instack[u]=0;
		}
	}
}
void solve(int x,int fa,int ST)
{
	int st=0;
	for(int cas=0;cas<vec[x].size();cas++)
	{
		int now=vec[x][cas];
		if(now==ST)st=cas;
		S[now][1]=1;
		for(int i=head[now];i;i=edge[i].next)
		{
			int V=edge[i].vet;
			if(belong[V]==fa||belong[now]==belong[V])continue;
			solve(belong[V],x,V);
			for(int X=K;X>=1;X--)
				for(int Y=1;Y<X;Y++)
					(S[now][X]+=1ll*S[now][X-Y]*F[V][Y]%mod)%=mod;
		}
	}
	int len=(int)vec[x].size();
	for(int cas=0;cas<len;cas++)stack[cas]=vec[x][cas];
	int tag=0;
	for(int X=1;X<=K;X++)F[ST][X]=S[ST][X];
	for(int i=0;i<len;i++)
	{
		for(int j=1;j<=K;j++)A[j]=S[stack[i]][j],(ans+=A[j])%=mod;
		int FF=(i==st);
		int ss=1;
		for(int j=(i+1)%len;j!=i;j=(j+1)%len)
		{
			if((j+1)%len==i)
			{
				if(tag)break;
				tag=1;
			}
			if(j==st)FF=1;
			int now=stack[j];
			for(int X=1;X<=K;X++)B[X]=0;
			for(int X=K;X>=1;X--) 
				for(int Y=1;Y<X;Y++) 
					(B[X]+=1ll*A[X-Y]*S[now][Y]%mod)%=mod;
			for(int X=1;X<=K;X++)A[X]=B[X],(ans+=A[X])%=mod;
			int flag=0;
			for(int X=1;X<=K;X++)if(A[X])flag=1;
			if(!flag)break;
			if(FF)for(int X=1;X<=K;X++)(F[ST][X]+=A[X])%=mod;
			ss++;
			if(ss>K)break;
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&K);
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);add(v,u);
	}
	Tarjan(1,0);
	solve(belong[1],0,1);
	printf("%d\n",ans);
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
关于仙人掌网络【人物投票系统】 仙人掌网络评选投票系统是一套基于WEB的网站程序,有ASP、PHP版本,使用Access/ms sql/mysql数据库,它用于举办网上评选活动,它适用于例如优秀节目支持人、十大杰出青年、漂亮宝宝等人物评选活动,也适用于摄影作品,书法绘画作品的网上评选投票活动。仙人掌网络评选投票系统有两个分支版本,一个是文字、文章的评选,用于征文等文章类评选活动,另外一个是仙人掌问卷调查系统,它可以建立多个问卷,支持单选、多选、填空等方式,后台有详细的统计数据。 仙人掌网络评选投票系统经过两年多的开发,为全国多家媒体、政府机构、地区门户网站提供了网上评选投票活动解决方案,我们汲取了宝贵的实际运营经验。拥有最为强大的投票防作弊系统来防止刷票作弊。 完善的售后服务体系,良好的用户口碑,造就了仙人掌网上评选投票活动强势品牌。 如果需要本程序,请联系QQ:30909034 30909034@qq.com 仙人掌网络评选投票系统拥有ASP和PHP两个版本,支持Access/Mssql/Mysql数据库,其中仙人掌网络评选投票系统V5.1由仙人掌网络自主开发,采用ASP ACCESS/MS SQL的基于互联网的网络评选投票系统,PHP版V2.0采用PHP Mysql ADODB SMARTY开发,可用于地区门户娱乐站、电视台、网络公司、政府机构举办人物、作品、标示等网络投票活动。 这是一套全新的评选系统版本,它经过仙人掌团队全体成员两年多通过提供全国各个地方电视台、政府机构、门户网站、个人站长、网络公司网上评选解决方案的经验和知识的结晶。 目前,本系统的主要功能如下: 1. 全功能后台管理、任意设置单选、多选的投票形式; 2. 支持IP、Cookies、整合其他系统会员投票限制机制;(原则上支持任意会员 系统整合,但不支持同步登陆) 新增禁止国外IP投票、禁止通过HTTP代理、在线代理等含有公用IP投票,可以在一定程度上防止刷票 新增直接选手锁定,可以指定锁定时间,到时间后自动解锁,锁定期间不能被投票 新增记录参与投票的用户来源 3. 支持后台对IP、Cookies、会员接口进行规则设置; 4. 支持IP/IP段封锁; 5. 自主开发的复杂验证码(需要ASPJPEG组件支持,可选); 6. 支持选手自主报名、管理员后台审核; 7. 支持选手登陆修改资料; 8. 支持无限选手相册; 9. 支持无限选手视频添加; 10. 支持得票、人气指数、评论数排行; 11. 支持插入视频、音频、FLASH代码; 12. 选手DIY代码,使选手界面更灵活; 13. 支持评论、评论表情; 14. 支持单页信息;(例如赛事介绍,参赛规则) 15. 支持新闻信息;(赛事新闻) 16. 支持在线举报 17. 部分采用AJAX技术,提高用户体验; 18. 自由分组; 更多功能等待您去发现。 二、 ASP版本V5系统环境要求 Windows系列服务器 IIS 5.5以上版本 MS SQL 2000数据库(可选) ASPJPEG组件(可选) 三、 PHP版 V2 系统环境要求 * Windows/Linux系列服务器 * PHP 4.01以上 推荐 PHP5.2 * Mysql 4.1以上 推荐Mysql 5.0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack-Oran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值