hackerrank Alex对战Fedor
为了在漫长得飞行旅途中娱乐,Alex和Fedor发明了如下的一个简单的双人游戏。游戏是:
首先, Alex画一个有权无向图。该图中可能有多重边(多重边的权值可能相同或者不同)。
然后,Fedor选取该图的一个生成树。如果该树是这个图的最小生成树,则Fedor获胜。否则,Alex获胜。
如果两棵树分别包含的边标号形成的两个集合不相同,我们认为这两棵树不同。两个集合A和B,如果至少存在一个元素在A中但不在B中,或者反之,至少存在一个元素在B中但不在A中,则我们认为这两个集合不同。
我们还要指出图拥有太多的生成树会让Alex和Fedor烦乱,于是他们不会用多于$10^{18}$棵生成树的图进行游戏。
现在, Fedor懒得找最小生成树了,于是他会任选一个Alex的图的生成树。每棵生成树被Fedor选择的概率相同。请问此时Fedor获胜的概率是多少?
裸的矩阵树定理,但是这玩意卡精度,卡了我一个多小时……把long double换成__float128就过了,要是还卡估计就得强行取模+CRT了。
#include<cassert>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 401
#define ld __float128
#define ll long long
#define int long long
using namespace std; int read_p,read_ca,read_f;
inline int read(){
read_p=;read_ca=getchar();read_f=;
while(read_ca<''||read_ca>'') read_f=read_ca=='-'?-:read_f,read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p*read_f;
}
struct na{int x,y,z;}b[MN];
bool operator < (na a,na b){return a.z<b.z;}
int n,m,a[MN][MN],fa[MN],s[MN];
ll mmh,MMH,o;
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
ld _abs(ld x){return x<?-x:x;}
ll gauss(int n){
static ld b[MN][MN];
int i,j,k;
ld x=;
for (i=;i<=n;i++)
for (j=;j<=n;j++) b[i][j]=a[i][j];
for (i=;i<=n;i++){
for (j=i;j<=n;j++) if (_abs(b[j][i])>_abs(b[i][i]))
for (k=i;k<=n;k++) swap(b[j][k],b[i][k]);
for (j=i+;j<=n;j++){
ld s=b[j][i];
for (k=i;k<=n;k++) b[j][k]-=b[i][k]/b[i][i]*s;
}
x*=b[i][i];
}
return (ll)(_abs(x)+0.5);
}
int gf(int x){return x==fa[x]?x:fa[x]=gf(fa[x]);}
inline void add(int x,int y){x=gf(x);y=gf(y);fa[x]=y;}
bool cmp(na a,na b){return gf(a.x)<gf(b.x);}
inline ll work(int l,int r){
for (int i=;i<=n;i++) s[i]=;
for (int i=l;i<r;i++)
if (b[i].x!=b[i].y) s[b[i].x]=,s[b[i].y]=;
for (int i=;i<=n;i++) s[i]+=s[i-];
for (int i=;i<=s[n];i++)
for (int j=;j<=s[n];j++) a[i][j]=;
memset(a,,sizeof(a));
for (int i=l;i<r;i++)
if (b[i].x=s[b[i].x],b[i].y=s[b[i].y],b[i].x!=b[i].y)
a[b[i].x][b[i].y]--,a[b[i].y][b[i].x]--,a[b[i].x][b[i].x]++,a[b[i].y][b[i].y]++;
return gauss(s[n]);
}
ll Mavis(){
ll mmh=;
sort(b+,b++m);
for (int i=,j=;i<=m;i=j){
while (b[j].z==b[i].z&&j<=m) j++;
for (int k=i;k<j;k++) b[k].x=gf(b[k].x),b[k].y=gf(b[k].y);
for (int k=i;k<j;k++) add(b[k].x,b[k].y);
sort(b+i,b+j,cmp);
for (int k=i,l=i;k<j;k=l){
while (l<j&&gf(b[l].x)==gf(b[k].x)) l++;
mmh*=work(k,l);
}
}
for (int i=;i<=n;i++) if (gf(i)!=gf()) return ;
return mmh;
}
signed main(){
n=read();m=read();
for (int i=;i<=n;i++) fa[i]=i;
for (int i=;i<=m;i++)
b[i].x=read(),b[i].y=read(),b[i].z=read(),
a[b[i].x][b[i].y]--,a[b[i].y][b[i].x]--,a[b[i].x][b[i].x]++,a[b[i].y][b[i].y]++;
mmh=gauss(n);MMH=Mavis();o=gcd(mmh,MMH);if (o) mmh/=o,MMH/=o;
printf("%lld/%lld\n",MMH,mmh);
}
hackerrank Alex对战Fedor的更多相关文章
- CF467D Fedor and Essay 建图DFS
Codeforces Round #267 (Div. 2) CF#267D D - Fedor and Essay D. Fedor and Essay time limit per test ...
- cf467B Fedor and New Game
B. Fedor and New Game time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Codeforces Round #267 (Div. 2) D. Fedor and Essay tarjan缩点
D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #267 (Div. 2) B. Fedor and New Game【位运算/给你m+1个数让你判断所给数的二进制形式与第m+1个数不相同的位数是不是小于等于k,是的话就累计起来】
After you had helped George and Alex to move in the dorm, they went to help their friend Fedor play ...
- CodeForces 467D(267Div2-D)Fedor and Essay (排序+dfs)
D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #267 (Div. 2) B. Fedor and New Game
After you had helped George and Alex to move in the dorm, they went to help their friend Fedor play ...
- [CF467D] Fedor and Essay
After you had helped Fedor to find friends in the «Call of Soldiers 3» game, he stopped studying com ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- 基于C/S架构的3D对战网络游戏C++框架_01服务器端与客户端需求分析
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
随机推荐
- 【ANT】taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found using the classloader AntClassLoader[]解决办法
把文件apache-jmeter-3.1\extras\ant-jmeter-1.1.1.jar复制到apache-ant-1.10.1\lib目录下即可.
- C# TreeView 控件的综合使用方法
1.概述 该篇文章开发使用的语言c#,环境visualstudio2010,sql数据库.主要内容包括: (1)treeView控件添加根节点.子节点的基本方法,节点的删除. (2)把treeView ...
- 大赛获奖选手专访 | 冷燕冰:最佳设计奖TIMING里的时机和时序
Mockplus三周年原型设计大赛,从筹备到11月21日完美落幕,50余天的时光,已成为过去.这场近千人参赛的原型设计大赛,我想,无论是于主办方,于参赛选手,于专家评委,还是于每一个关注和参与的人,都 ...
- 解决360随身wifi每天首连频繁断线
经本人试过几个星期是可以的,需要的话加微新备注:solq123987654
- 执行PHP脚本时遇到 mysql_connect(): Headers and client library minor version mismatch的解决方法
把服务器从Windows迁移到了centos7.2,配置好PHP运行环境后,项目运行正常. 但在命令行中运行一个PHP脚本时,遇到了标题中显示的错误 使用 php -i | grep Client 得 ...
- ASP.NET MVC框架开发系列教程
本系列教程是自己在工作中使用到而记录的,如有错误之处,请给与指正 文章目录 MVC4 开篇 第一章 初识MVC4 第二章 下山遇虎(@helper) 第三章 Models模块属性详解 第四章 在MVC ...
- 简单搭建ES6的环境
一.兼容情况 说到ECMAScript6,顺便提一下ECMAScript5,先看一下ES5的兼容情况.ES5浏览器支持情况: Opera 11.60:Internet Explorer 9*:Fire ...
- Center OS 7 安装 $$
资料来自网络,收集整理做个备忘 1. 安装Python # yum install python-setuptools && easy_install pip 2. 安装$$ # pi ...
- HTML、CSS、JS 复习——序
HTML在MVC中担任着M的角色.由HTML组成的节点称之为HTML DOM.要想成为一流的大神,就必须能分分钟建立起一个强大的HTML DOM.而要做到这点,就必须了解甚至精通HTML. CSS在M ...
- Linux下查询进程PS或者杀死进程kill的小技巧
假设我们要kill掉tomcat: 那么我们首先需要tomcat的进程号pid: ps -aux | grep tomcat 记下tomcat的PID后,执行:kill PID(tomcat) 好了, ...