20pts求调
查看原帖
20pts求调
1283894
Czy54188楼主2024/8/21 13:48

写了两遍,都是20分 第一遍:

#include <bits/stdc++.h>

struct place{
	int iq,aq,lon;
}sb[51];
int n,m,ans;
bool vis[21];

void dfs(int num,int start){
	if(num>ans) ans=num;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(sb[j].iq==start && vis[sb[j].aq]){
		vis[sb[j].aq]=false;
		dfs(num+sb[j].lon,sb[j].aq);
		vis[sb[j].aq]=true;
	}
	return ;
}

int main(){
	ans=-1;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) vis[i]=true;
	for(int i=1;i<=m;i++) scanf("%d%d%d",&sb[i].iq,&sb[i].aq,&sb[i].lon);
	for(int i=1;i<=n;i++){
		vis[i]=false;
		dfs(0,i);
		vis[i]=true;
	}
	printf("%d",ans);
	return 0;
}

第二遍:

#include <bits/stdc++.h>

std::vector<int> iq[50][2];
int n,m,ans,len[50],s,x,y;
bool vis[21];

void dfs(int num,int start){
	if(num>ans) ans=num;
	for(int i=1;i<=n;i++) for(int j=0;j<len[i];j++) if(vis[iq[i][0][j]]){
		vis[iq[i][0][j]]=false;
		dfs(num+iq[i][1][j],iq[i][0][j]);
		vis[iq[i][0][j]]=true;
	}
	return ;
}

int main(){
	ans=-1;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		vis[i]=true;
		len[i]=0;
	}
	for(int i=1;i<=m;i++){
		scanf("%d",&s);
		len[s]++;
		scanf("%d%d",&x,&y);
//		scanf("%d%d",&iq[s][0][len[s]],&iq[s][1][len[s]]);
		iq[s][0].push_back(x);
		iq[s][1].push_back(y);
	}
	for(int i=1;i<=n;i++){
		vis[i]=false;
		dfs(0,i);
		vis[i]=true;
	}
	printf("%d",ans);
	return 0;
}
2024/8/21 13:48
加载中...