蒟蒻C++WA+TLE9求调
查看原帖
蒟蒻C++WA+TLE9求调
722468
MrJC_Pandingding楼主2023/11/26 09:14
#include<bits/stdc++.h>
using namespace std;
const int maxn=500;
int cnt,i,j,k,m,n,pth[maxn+10];
bool by[maxn+10],bz[maxn+10];
long long mn,p[maxn+10][maxn+10],sumn,u,v,w,x[maxn+10],y[maxn+10];
bool findpth(int xx)
{
	int i;
	by[xx]=true;
	for(i=n;i>=1;--i)
	{
		if(!bz[i]&&x[xx]+y[i]==p[xx][i])
		{
			bz[i]=true;
			if(!pth[i]||findpth(pth[i]))
			{
				pth[i]=xx;
				return true;
			}
		}
	}
	return false;
}
int main()
{
	//freopen("P6577_2.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			p[i][j]=LLONG_MIN;
	while(m--)
	{
		scanf("%d%d%lld",&u,&v,&w);
		p[u][v]=w;
	}
	for(i=1;i<=n;++i)
	{
		x[i]=LLONG_MIN;
		for(j=1;j<=n;++j)
			x[i]=max(x[i],p[i][j]);
	}
	for(i=1;i<=n;++i)
	{
		while(!findpth(i))
		{
			mn=LLONG_MAX;
			for(j=1;j<=n;++j)
				if(by[j])
					for(k=1;k<=n;++k)
						if(!bz[k])
							mn=min(mn,x[j]+y[k]-p[j][k]);
			for(j=1;j<=n;++j)
			{
				if(by[j])
					x[j]-=mn;
				if(bz[j])
					y[j]+=mn;
			}
			memset(by,false,sizeof by);
			memset(bz,false,sizeof bz);
		}
	}
	for(i=1;i<=n;++i)
		sumn+=p[pth[i]][i];
	printf("%lld\n",sumn);
	for(i=1;i<=n;++i)
		printf("%d ",pth[i]);
	return 0;
}

记录,不明白为啥会有 WA,求调,悬赏 33 个关注。

2023/11/26 09:14
加载中...