求助大佬,蒟蒻0分,样例已过
查看原帖
求助大佬,蒟蒻0分,样例已过
361266
Andy_Li楼主2022/8/23 09:31

开不开堆优化,吸不吸氧都0分

#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <limits.h>
#include <locale.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <complex.h>
#include <fenv.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdint.h>
#include <tgmath.h>
using namespace std;
const int N=1e5+10,M=5e5+10;
int n,m,s,l,cnt=0,h[N],ne[M],w[M],e[M],dis[N];
bool st[N];
typedef pair<int,int> pii;
queue<pii>heap;
queue<int> a;
vector<int> ans[N];
stack<int> a1;
void add(int a,int b,int c)
{
	e[cnt]=b;
	ne[cnt]=h[a];
	w[cnt]=c;
	h[a]=cnt++;
	return ;
}
void dijkstra()
{
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	pii f;
	heap.push({0,s});
	while(!heap.empty())
	{
		f=heap.front();
		heap.pop();
		if(st[f.second]==0)
		{
			int u=f.second;
			st[u]=1;
			int v=f.first;
			for(int i=h[u];i!=-1;i=ne[i])
			{
				int j=e[i];
				if(dis[j]>=v+w[i])
				{
					dis[j]=v+w[i];
					heap.push({dis[j],j});
					a.push(w[i]);
				}
			}
		}
	}
	return ;
}
int main()
{
	memset(h,-1,sizeof(h));
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
	}
	int num=1;
	cnt=0;
	cin>>s>>l;
	dijkstra();
	while(!a.empty())
	{
		int o=a.front();
		if(cnt+o<=dis[l])
		{
			cnt+=o;
			ans[num].push_back(o);
		}
		else
		{
			cnt=o;
			ans[++num].push_back(cnt);
		}
		a.pop();
	}
	int lr=0,maxn=-1,maxx=-1;
	for(int i=1;i<=num;i++)
	{
		int ttt=ans[i].size();
		maxn=max(maxn,ttt);
	}
	for(int i=1;i<=num;i++)
	{
		int ttt=ans[i].size();
		if(ttt!=maxn)
			continue;
		int cnt=1;
		for(int j=0;j<ans[i].size();j++)
			cnt*=ans[i][j];
		if(cnt>maxx)
		{
			lr=i;
			maxx=cnt;
		}
	}
	for(int i=0;i<ans[lr].size();i++)
		a1.push(ans[lr][i]);
	double ansans=100.0;
	while(!a1.empty())
	{
		int as=a1.top();
		ansans=ansans/((1-0.01*as)*1.0);
		a1.pop();
	}
	printf("%.8lf",ansans);
	return 0;
}
2022/8/23 09:31
加载中...