首页 > 其他分享 >[HNOI2013] 游走

[HNOI2013] 游走

时间:2024-11-01 16:59:15浏览次数:2  
标签:int HNOI2013 -- num 游走 define getchar

根据题意,我们容易发现只要我们得到了每一条边被经过的期望次数就可以给这些边编号。

设 \(d_x\) 表示点 \(x\) 的度数。
所以我们先用高斯消元求出每个点被经过的期望次数 \(f_x\),那么 $E(u,v) = \frac{f_u}{d_u} + \frac{f_v}{d_v} $。
然后就做完了。

点击查看代码
#include<bits/stdc++.h>
#define fir first
#define sec second
#define int long long
#define lowbit(x) x&(-x)
#define mkp(a,b) make_pair(a,b)
using namespace std;
typedef pair<int,int> pir;
inline int read(){
	int x=0,f=1; char c=getchar();
	while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
	while(isdigit(c)){x=x*10+(c^48); c=getchar();}
	return x*f;
}
const int inf=1e18,N=5e2+5;
int n,m;
int du[N];
struct edge{int u,v;}p[N*N];
double a[N][N],res[N],num[N*N];
vector<int> ed[N];
inline void Guass(int n){
    for(int i=1;i<=n;i++){
        int now=i;
        for(int j=i+1;j<=n;j++) if(fabs(a[now][i])<fabs(a[j][i])) now=j;
        for(int j=1;j<=n+1;j++) swap(a[now][j],a[i][j]);
        for(int k=n+1;k>=i;k--) for(int j=i+1;j<=n;j++)
        a[j][k]-=(a[j][i]/a[i][i])*a[i][k];
    }
    for(int i=n;i>=1;i--){
        res[i]=a[i][n+1]/a[i][i];
        for(int j=1;j<i;j++)
        a[j][n+1]-=res[i]*a[j][i];
    }
}
signed main(){
    n=read(),m=read();
    for(int i=1;i<=m;i++){
        int u=read(),v=read();
        p[i]={u,v};
        du[u]++,du[v]++;
        ed[u].push_back(v);
        ed[v].push_back(u);
    }
    for(int x=1;x<n;x++){
        a[x][x]=1;
        for(auto v:ed[x]){
            if(v!=n)
            a[x][v]=(double)-1/du[v];
        }
    }
    a[1][n]=1;
    Guass(n-1);
    for(int i=1;i<=m;i++){
        auto [u,v]=p[i];
        if(u!=n) num[i]+=res[u]/du[u];
        if(v!=n) num[i]+=res[v]/du[v];
    }
    sort(num+1,num+m+1);
    double ans=0;
    for(int i=m;i>=1;i--) ans+=(m-i+1)*num[i];
    printf("%.3lf\n",ans);
}

标签:int,HNOI2013,--,num,游走,define,getchar
From: https://www.cnblogs.com/Cyan0826/p/18520830

相关文章

  • 关于随机游走的思考
    前话很早就想给随机游走类问题做个总结了,以后又想到一题不定期更新。2024.6.22题目描述一维空间内,前进一步,后退一步,原地不同概率均为\(\cfrac{1}{3}\),\(0\)点后退后还是\(0\)点。求从\(0\)点走到右端点\(n\)的期望步数。解决套路化记\(f[i]\)表示从\(i\)走到\(......
  • P6154 游走
    原题链接题解由于选择每一条路径的概率是一样的,所以我们统计出所有路径的条数,和长度之和,然后除一下就行了,除法求模等价于乘模数下的逆元code#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstllmod=998244353;lllanes[100005]={0},sum[100005]={0......
  • 洛谷 P8989 [北大集训 2021] 随机游走 题解
    前言又是随机游走?题目分析看到加边,可能性太多了。但是为了让步数最大化,我们可以贪心地想,肯定要往前面连,而且越前面要走的期望步数肯定越大。并且,我们不会浪费边在终点上。于是,题目转变成了\(1\simn-1\)连向起点\(1\)连若干条边,使得随机游走到终点的期望步数最大。那要......
  • C语言实现随机游走算法(Random Walks)
    目录前言A.建议B.简介一代码实现二时空复杂度A.时间复杂度:B.空间复杂度:C.总结:三优缺点A.优点:B.缺点:C.总结:四现实中的应用前言A.建议1.学习算法最重要的是理解算法的每一步,而不是记住算法。2.建议读者学习算法的时候,自己手动一步一步地运行算法。B.......
  • 游走在智商税边缘的“觅光花至们”,到底冤不冤?
    作者|图霖被嘲“智商税”的风,在家用美容仪消费市场就没停过。随着入局的品牌越来越多,市场认知越来越广,尝鲜的用户也就越来越众。自然,得出的用户体验也相对更为全面多维。在众口铄金对家用美容仪的“智商税”嘲讽中,已经有不少消费者在黑猫投诉上发起了权益保卫战。根据这群真实用......
  • P3227 [HNOI2013] 切糕
    题意linkSol考虑不戴限制的情况,那就是对于每一层连到下一层跑网络流。考虑戴上添边,不难发现向相邻的点连一条\(inf\)边就行了。Code#include<iostream>#include<algorithm>#include<cstdio>#include<array>#include<queue>#defineintlonglong#definepiipa......
  • SDU Open 2023-F、树上随机游走
    SDUOpen2023-F、树上随机游走题目:https://codeforces.com/group/2altttv8oU/contest/477604/problem/F题意:给定一棵\(n\)个点的无根树,在树上随机游走(即每次会从当前点等概率地走到一个相邻结点),\(q\)次询问,每次问从\(s\)走到\(t\)的期望步数。\(1\leqn,q\leq2\times......
  • 在代码世界游走,没几把“锁”防身可不行
    一、开篇背景“锁”代表安全。在程序中(这里指java)尤其多线程环境下,有了锁的帮助,会给数据安全带来保障,帮助线程更好的运作,避免竞争和互斥。锁共有15种算法:乐观锁、悲观锁、自旋锁、重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥......
  • 在代码世界游走,没几把“锁”防身可不行
    一、开篇背景“锁”代表安全。在程序中(这里指java)尤其多线程环境下,有了锁的帮助,会给数据安全带来保障,帮助线程更好的运作,避免竞争和互斥。锁共有15种算法:乐观锁、悲观锁、自旋锁、重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥......
  • P3227 [HNOI2013]切糕
    P3227[HNOI2013]切糕题意给定一个\(P\timesQ\)的平面,平面上每一个点上都有一个高度为\(R\)的竖条。竖条上每一个点都有一个不和谐度\(f(x,y,z)\),对于每一个竖条选一个点,要求与周围的点的高度差不超过\(d\)(四联通),求最小不和谐度。题解感觉这道题很神啊,首先我们考......