90分,WA on #7 求调
查看原帖
90分,WA on #7 求调
536369
Saicy_zc32楼主2023/5/31 15:30
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,p,ans;
int dis[105][105];
bool vis[105],pll[105];
int pl[105];
void dfs(int dt,int cost,int visited){
//	cout<<"as";
	if(cost>ans)return;
	if(visited==p){
		ans=min(ans,cost+dis[dt][n]);
		return;
	}
	for(int i=1;i<=p;i++){
		if(!vis[pl[i]]){
			vis[pl[i]]=true;
			dfs(pl[i],cost+dis[dt][pl[i]],visited+1);
			vis[pl[i]]=false;
		}
	}
	return;
}
signed main(){
	memset(pll,false,sizeof pll);
	ans=0x3fffffff;
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>dis[i][j];
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(dis[i][k]!=0&&dis[k][j]!=0)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			}
		}
	}
	cin>>p;
	bool flag=false;int ol=0;
	for(int ik=1;ik<=p;ik++){
		int kld;
		cin>>kld;
		if(pll[kld]){
			ol++;
			continue;
		}
		pll[kld]=true;
		pl[ik]=kld;
		if(kld==1)flag=true;
	}
	p-=ol;
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=n;j++){
//			cout<<dis[i][j]<<" ";
//		}
//		cout<<endl;
//	}
//	for(int i=1;i<=p;i++){
//		cout<<pl[i]<<" ";
//	}
	vis[1]=true;
	dfs(1,0,flag);
	cout<<ans<<endl;
	return 0;
}
2023/5/31 15:30
加载中...