[확률 과 기대] [사기] 관광 철도
34646 단어 확률 과 기대
C 군 은 벼룩 왕 에 게 방안 을 제공 했다.벼룩 왕 은 이 방안 에서 각 도시 의 주민 들 이 여행 하 는 기대 시간 (기 차 를 설치 하여 모든 철 도 를 지 나 는 시간 은 1) 을 알 고 싶 어 합 니 다. 벼룩 왕 을 도와 주세요.입력 형식 입력 의 첫 줄 은 두 개의 정수 n, m 를 포함 하 는데 그 중에서 n 은 도시 의 수량 을 나타 내 고 m 는 방안 중의 철도 조 수 를 나타 낸다.다음 m 행 은 각 줄 에 두 개의 정수 u, v 를 포함 하고 방안 에서 도시 u 와 도시 v 사이 에 철도 가 있다 는 것 을 나타 낸다.보증 방안 에 무 거 운 변 이 없고 두 도시 간 에 철 도 를 거 쳐 직접 또는 간접 적 으로 도착 할 수 있 으 며 기 차 는 임 의 철도 에서 임 의 도시 로 간 후에 반드시 갈 길이 있 을 것 이다.출력 형식 은 n 줄 을 출력 하고 i 줄 은 실수 tBi 를 포함 하 며 방안 B 에서 도시 i 의 주민 관광 에 대한 기대 시간 을 나타 낸다.출력 값 과 실제 값 사이 의 절대 또는 상대 적 인 오차 가 1e - 9 를 초과 하지 않도록 충분 한 소수 자릿수 를 출력 해 야 합 니 다.
제 가 잘 못 했 습 니 다. 그 전에 블 루 브리지 컵 은 모두 물 문제 가 많다 고 생각 했 습 니 다.이틀 동안 갑자기 문제 고 를 닦 으 려 고 하 다가 어 려 운 문제 에 부 딪 혔 다. 이것 이 바로 그 중의 비교적 변태 적 인 것 이다.우선 저 는 정 해 가 아니 지만 인터넷 에서 정 해 를 찾 지 못 했 습 니 다.찾 을 수 있 는 것 은 오직 이 편 뿐이다.https://blog.csdn.net/weixin_40839812 / article / details / 79769757 은 잘 모 르 겠 고 저 자 는 돌아 갈 수 없 는 조건 을 고려 하지 않 았 고 코드 를 제공 하지 않 았 기 때문에 정확성 이 확실 하지 않다 고 생각 합 니 다.나중에 천천히 연구 해. 다른 생각 이 없 으 면 폭력 을 먼저 때 리 고 기 대 를 하면 확률 을 먼저 구 합 니 다. 돌아 갈 수 없 기 때문에 어느 시간 에 확률 은 2 차원 의 재능 으로 전달 해 야 합 니 다. 출발점 을 1 로 예 로 들 면 우 리 는 T 단계 에서 노드 j 에서 노드 i 까지 의 사건 이 발생 할 확률 p [T] [i] [j] pb [T] [i] [j] pb [T] [i] [j] pb [T] [i] [j] (그 중에서 i 는 출발점 1 이 아 닙 니 다) 를 구 해 야 합 니 다. 이것 은 처리 하기 쉽 습 니 다.T - 1 단계 에서 순서대로 T 단 계 를 내 놓 으 면 됩 니 다. T 단계 에서 출발점 1 로 돌아 갈 확률 을 찾 아 보 세 요. ∑ p b [T - 1] [i] [i] d [i] - 1 \ \ \ sum {\ frac {pb [T - 1] [i]} {d [i] - 1} ∑ d [i] - 1pb [T - 1] [i] [j] (i 와 1 이 연결 되 어 있 지만 j 는 i 가 아 닙 니 다) 이 수 치 를 T 에 곱 하고 답 을 누적 하면 됩 니 다. 충분 한 T 만 있 으 면 됩 니 다.답 은 무한 한 접근 과 진실 한 기대 이다. 정확성 을 고려 해 T 가 클 수록 누적 수치 가 매우 작 냐 는 질문 이 나 올 수 있 습 니 다.나 는 수렴 속 도 를 증명 할 방법 이 없 지만 확률 의 감소 속 도 는 T 가 증가 하 는 속도 보다 훨씬 클 것 같 아서 수렴 이 비교적 빠르다.그래서 첫 번 째 폭력 을 시도 한 것 이 바로 위의 생각 이다.
#include
#include
using namespace std;
double ans,pb[2][25][25];
vector<int> E[25];
int n,m,o;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<=m;i++)
scanf("%d%d",&u,&v),E[u].push_back(v),E[v].push_back(u);
for(int p=1;p<=n;p++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
pb[0][i][j]=0;
for(int q=0;q<E[p].size();q++)
pb[0][E[p][q]][p]=1.0/E[p].size();
ans=o=0;
for(int t=1;t<=300;t++) // t T-1
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
pb[o^1][i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=0;k<E[i].size();k++)
if(E[i][k]!=j)
if(E[i][k]!=p)
pb[o^1][E[i][k]][i]+=pb[o][i][j]/(E[i].size()-1);
else
ans+=(t+1)*pb[o][i][j]/(E[i].size()-1);
o^=1;
}
printf("%.12lf
",ans);
}
return 0;
}
남 은 최 악의 순환 은 n 4 n ^ 4 n4 의 효율 이기 때문에 시간 을 300 까지 매 거 하면 안 됩 니 다.5 점 밖 에 얻 지 못 했다. 하 나 는 정확도 가 내 가 생각 했 던 것 보다 높 지 않 았 기 때문이다. 다른 하 나 는 블 루 브리지 가 SPJ (맙소사) 를 사용 하지 않 았 기 때문이다. 즉, 모 르 는 사이 에 문제 의 난이 도 를 증가 시 켰 기 때문에 나 는 12 명의 소 수 를 완전히 일치 시 켜 야 한다.그런데 말 이 야, 나 는 점 수 를 속 이 는 데 아주 능숙 해.우선 더 블 은 모두 롱 더 블 로 만 들 었 다.그 다음 에 n 이 비교적 작다 면 우 리 는 T 를 적당 하 게 확대 하고 더욱 정확 할 수 있다.또한 직관 적 으로 나 에 게 T 가 클 때 확률 pb 배열 간 의 상대 적 인 크기 가 특정한 안정 상태 에 이 를 수 있다 는 것 을 알려 주 었 다. 즉, 출발점 으로 돌아 갈 확률 이 T 가 비교적 클 때 무한 등비 수축 수열 이 될 수 있다 는 것 을 의미한다.절차 검증 을 거 쳐 나의 생각 은 실증 에 이 르 렀 다.그러면 만약 에 이 수열 의 공비 v 를 알 게 된다 면 매 거 진 후에 저 는 급수 적 으로 화 해 를 구 하 는 방식 으로 제 가 적 게 넣 은 부분 을 보충 하면 정확도 가 크게 높 아 질 것 입 니 다.(갑자기 유 휘 가 3.14 를 구 한 후에 비슷 한 보족 법 으로 3.1416 QwQ 를 만 들 었 다 고 생각 했다.) 저 는 제 t 가 l i m lim lim (즉, T = lim + 1) 에 들 어 갔다 고 가정 하고 제 lim 걸음 의 증 가 는 a 입 니 다. 저 는 l i m lim lim 과 l i m - 1 lim - 1 lim - 1 두 걸음 의 원점 으로 돌아 갈 확률 을 공비 v 에 비유 한 다음 에 저희 가 요구 하 는 것 은 > a * 8727 ° T + a * 8727 ° v 2 * 8727 ° (T + 1) 입 니 다.... \ sum {a * v * T + a * v ^ 2 * (T + 1)}.『 8195 』 실천 을 통 해 효과 가 매우 좋다 는 것 을 발견 했다.『 8195 』 개 선 된 폭력:
#include
#include
using namespace std;
int lim;
long double ans,pb[2][25][25],ty,tx;
vector<int> E[25];
int n,m,o;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<=m;i++)
scanf("%d%d",&u,&v),E[u].push_back(v),E[v].push_back(u);
lim=60000000/n/n/n/n;
for(int p=1;p<=n;p++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
pb[0][i][j]=0;
for(int q=0;q<E[p].size();q++)
pb[0][E[p][q]][p]=1.0L/E[p].size();
tx=ty=ans=o=0;
for(int t=1;t<=lim;t++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
pb[o^1][i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=0;k<E[i].size();k++)
if(E[i][k]!=j)
if(E[i][k]!=p)
pb[o^1][E[i][k]][i]+=pb[o][i][j]/(E[i].size()-1);
else
{
ans+=(t+1)*pb[o][i][j]/(E[i].size()-1);
if(t==lim-1)
tx+=pb[o][i][j]/(E[i].size()-1);
else if(t==lim)
ty+=pb[o][i][j]/(E[i].size()-1);
}
o^=1;
}
long double v=0;
int cnt=0;
if(tx>0)
v=ty/tx;
printf("%.12Lf
",ans+ty*(lim*v+(2*v-v*v)/(1-v))/(1-v));
}
return 0;
}
* 8195 점 을 받 았 는데 더 이상 개선 할 방법 이 없어 서 남 은 것 이 무슨 이상 한 데이터 인지 모 르 겠 습 니 다.개인 적 으로 SPJ 에 가면 AC 기회 가 있 을 것 같 아서 요.이렇게 하 자. 요구 가 너무 높 아. 그리고 정 해 를 기대 해.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[noip 2016] 교실 바 꾸 기 문제 풀이사실 noip 시험 기간 은 아주 좋 습 니 다. 하지만 기대 하 는 지식 을 조금 만 알 면 만 들 수 있 습 니 다. 고려 하 다두 교실 사이 의 최 단 로 는 플 로 이 드 로 미리 처리 할 수 있 고 나중에 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.