写了两遍,都是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;
}