本以为输出个浮点数,没想到出了字符
  • 板块学术版
  • 楼主cmaths
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/2/1 16:52
  • 上次更新2023/10/24 02:12:15
查看原帖
本以为输出个浮点数,没想到出了字符
300098
cmaths楼主2023/2/1 16:52
#include<bits/stdc++.h>
using namespace std;
const int N=505,M=125005;
double q[N][N],b[N],x[N];
int ver[M],nex[M],star[M],head[N],tot;
int n,m;
int in[N];
double h[M];
void gaosixiaoyuan()
{
	for(int i=1;i<=n;i++)
	{
		int j=i;
		for(int k=i;k<=n;k++)
		{
			if(fabs(q[k][i])>fabs(q[j][i]))
			{
				j=k;
			}
		}
		for(int k=1;k<=n+1;k++)
		{
			swap(q[i][k],q[j][k]);
		}
		for(int j=1;j<=n;j++)
		{
			if(j==i)
			{
				continue;
				
			}
			double t=q[j][i]/q[i][i];
			for(int k=1;k<=n;k++)
			{
				q[j][k]-=q[i][k]*t;
			}
			b[j]-=t*b[i];
		}
	}
	for(int i=1;i<=n;i++)
	{
		x[i]=q[i][n+1]/q[i][i];
	}
}
void add(int x,int y)
{
	ver[++tot]=y;
	star[tot]=x;
	nex[tot]=head[x];
	head[x]=tot;
}
int main()
{
	b[1]=1;
	cin>>n>>m;
	int s=m;
	while(s--)
	{
		int u,v;
		cin>>u>>v;
		add(u,v);
		add(v,u);
		in[v]++;
		in[u]++;
	}
	for(int i=1;i<n;i++)
	{
		q[i][i]=1.0;
		for(int j=head[i];j;j=nex[j])
		{
			int k=ver[j];
			if(j!=n)
			{
				q[j][k]=1.0/in[k];
			}
		}
	}
	
	gaosixiaoyuan();
	
	for(int i=1;i<=m;i++)
	{
		h[i]=x[star[i]]/in[star[i]]+x[ver[i]]/in[ver[i]];
	}
	sort(b+1,b+n+1);
	sort(h+1,h+m+1);
	double ans=0;
	for(int i=1;i<=m;i++)
	{
		ans+=(m-i+1)*h[i];
	}
	printf("%.3f\n",ans);
}

input:

3 3
2 3
1 2
1 3

output:

-1.#IO

求各位dalao将bug绳之以法(

2023/2/1 16:52
加载中...