当前位置: 首页 > news >正文

UVA 11174 Stand in a Line 树dp+算

主题链接:点击打开链接

题意:白书的P103.

加个虚根就能够了。。。然后就是一个多重集排列。

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	static int N = 40100;
	ArrayList<Integer>[] G = new ArrayList[N];
	static long mod = 1000000007;
	long[] way = new long[N];
	long[] fac = new long[N];
	int n, m;
	int[] father = new int[N], siz = new int[N];
	long Pow(long x, long y){
		long ans = 1;
		while(y > 0){
			if(y%2 == 1L)
				ans = (ans*x)%mod;
			x = (x*x)%mod;
			y >>= 1;
		}
		return ans;
	}
	void dfs(int u, int fa){
		siz[u] = 1; way[u] = 1L;
		for(int i = 0; i < G[u].size(); i++){
			int v = G[u].get(i); if(v == fa)continue;
			dfs(v, u);
			siz[u] += siz[v];
			way[u] = (way[u]*way[v])%mod;
		}
		way[u] = (way[u]* fac[siz[u]-1]) %mod;
		for(int i = 0; i < G[u].size(); i++){
			int v = G[u].get(i); if(v == fa)continue;
			way[u] = (way[u] * Pow(fac[siz[v]], mod-2))%mod;
		}
	}
	void init(){
		n = cin.nextInt();	m = cin.nextInt();
		for(int i = 0; i <= n; i++){
			father[i] = 0;
			G[i].clear();
		}
		while(m-- > 0){
			int u = cin.nextInt(), v = cin.nextInt();
			G[v].add(u);
			father[u] = v;
		}
		for(int i = 1; i <= n; i++)
			if(father[i] == 0){
				G[0].add(i);
			}
	}
	void work() {		
		for(int i = 0; i < N; i++)G[i] = new ArrayList();
		fac[0] = 1L;
		for(int i = 1; i < N; i++)	fac[i] = fac[i-1]*i%mod;
		int T = cin.nextInt();
		while(T-->0){
			init();
			dfs(0,0);
			out.println(way[0]);
		}
	}

	Main() {
		cin = new Scanner(System.in);
		out = new PrintWriter(System.out);
	}

	public static void main(String[] args) {
		Main e = new Main();
		e.work();
		out.close();
	}

	public Scanner cin;
	public static PrintWriter out;
}


版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mfrbuaa/p/4656190.html

相关文章:

  • HttpSessionListener的用法
  • JasperReports报表组15
  • BZOJ 1264: [AHOI2006]基因匹配Match( LCS )
  • 用Linux命令对两个文件进行连接操作
  • 一、小按钮和下面板---调试面板
  • memcached全面剖析–5. memcached的应用和兼容程序
  • 常见浏览器的兼容问题
  • 如何解决“不能打开数据库,用户NT AUTHORITY\NETWORK SERVICE登录失败”的错误呢?...
  • 基于vitamio的网络电视直播源码
  • Unity3D 导出apk 在真机调试时, 使用光贴图的模型丢失材质的BUG
  • 将C盘一个文本文件复制到D盘。
  • UVALive 6322 最大匹配...
  • 模板方法模式
  • Android Studio 简单介绍和使用问题小结
  • Redis内存存储结构分析
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Apache Pulsar 2.1 重磅发布
  • exif信息对照
  • Js基础知识(一) - 变量
  • log4j2输出到kafka
  • react 代码优化(一) ——事件处理
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 分享一份非常强势的Android面试题
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 技术:超级实用的电脑小技巧
  • 聚簇索引和非聚簇索引
  • 聊聊hikari连接池的leakDetectionThreshold
  • 目录与文件属性:编写ls
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 携程小程序初体验
  • 用 Swift 编写面向协议的视图
  • (13):Silverlight 2 数据与通信之WebRequest
  • (39)STM32——FLASH闪存
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (备忘)Java Map 遍历
  • (独孤九剑)--文件系统
  • (小白学Java)Java简介和基本配置
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET的微型Web框架 Nancy
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • /*在DataTable中更新、删除数据*/
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [20150707]外部表与rowid.txt
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++提高编程](三):STL初识
  • [codevs 1296] 营业额统计
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页