顯而易見,要最小化總分就要讓期望經過次數最多的邊權值最小。
而邊的期望可以通過點的期望匯出。
點的期望又可以通過和它相連的點的權值匯出。
就可以列成一組方程。
再高斯消元一下就可以解出來了。
#include#include#include#includeusing namespace std;const double eps=1e-8;
inline double max(double x,double y)
inline double abs(double x)
inline void swap(double &x,double &y)
inline bool cmp(const double &a,const double &b)
inline int read()ch=getchar();}
while(ch>='0'&&ch<='9')
return x*f;
}int n,m;
int u[250005],v[250005];
int map[505][505],du[505];
double a[505][505],res[505],val[250005];
inline void guess()
} for(i=n;i>0;i--)
}int main()
for(i=1;i<=n-2;i++)
for(j=1;j<=n-1;j++)
a[n-1][n]=1;
for(i=1;i<=n-2;i++) a[i][n]=(i-1)?0:(-1);
for(i=1;i<=n-1;i++) a[n-1][i]=1.0*map[n][i]/du[i];
n--;guess();
for(i=1;i<=m;i++) val[i]=1.0/du[u[i]]*res[u[i]]+1.0/du[v[i]]*res[v[i]];
sort(val+1,val+1+m,cmp);
for(i=1;i<=m;i++) ans+=val[i]*i;
printf("%.3lf\n",ans+eps);
return 0;
}
BZOJ 3143 遊走 高斯消元
中文題目。f v 表示小z在圖上游走時,在v點走的次數 這樣就可以根據圖上的鏈結關係 構造出n個方程在求解既可 include include include include using namespace std const int maxn 500 5 const double eps 1e 4...
BZOJ 3143 遊走(高斯消元)
題意 乙個無向連通圖,頂點從1編號到n,邊從1編號到m。小z在該圖上進行隨機遊走,初始時小z在1號頂點,每一步小z以相等的概率隨機選擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小z 到達n號頂點時遊走結束,總分為所有獲得的分數之和。現在,請你對這m條邊進行編號,使得小...
bzoj3143 遊走 概率 高斯消元
題目大意是說 給出一張無向圖,找出一種加權值的方式,使得從1到n期望帶權路徑長度最短,輸出最短路長度。首先,根據基本常識,走的次數多的邊,權值越小越好 廢話 於是問題轉變為 找出每條邊的期望經過次數。設i邊期望經過次數為f i 則f i 就為兩個端點期望經過次數與走到這條邊概率之商的和 沒看懂?就是...