76分求优化
查看原帖
76分求优化
658973
what_can_I_do楼主2022/12/18 13:29

TLE:2个点,WA:1个点,其中WA的原因是没输出-1,而输出准确的数字。

#include<bits/stdc++.h>
using namespace std;
int n,k,m,s,t,gjwh[110],whpc[110][110],g[110][110],ans=2147483647;
bool yxwh[110],vis[110],gjnd[110];
inline int dfs(int now,int lc)
{
	int flag=0,az=0;
	if(now==t){ans=min(ans,lc);return 1;}
	for(register int i=1;i<=n;i++)
		if(!whpc[i][now]&&!vis[i]&&!yxwh[gjwh[i]]&&g[now][i]&&!whpc[t][i]&&!gjnd[i])
		{
			vis[i]=1,yxwh[gjwh[i]]=1;
			if(!flag) flag=dfs(i,lc+g[now][i]);
			else az=dfs(i,lc+g[now][i]);
			vis[i]=0,yxwh[gjwh[i]]=0;
		}
	if(!flag) gjnd[now]=1;
	return flag;
}
int main()
{
    scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
    for(register int i=1;i<=n;i++) scanf("%d",&gjwh[i]);
    for(register int i=1;i<=k;i++) for(register int j=1;j<=k;j++) scanf("%d",&whpc[i][j]);
    for(register int i=1;i<=m;i++)
    {
    	int u,v,d;
    	scanf("%d%d%d",&u,&v,&d);
    	g[u][v]=d,g[v][u]=d;
	}
	if(whpc[t][s]==1){printf("-1");return 0;}
	vis[s]=1,yxwh[gjwh[s]]=1;
	dfs(s,0);
	if(gjnd[s]) printf("-1");
	else printf("%d",ans);
    return 0;
}
2022/12/18 13:29
加载中...