这道题踩了一堆坑 30min调bug才满分!
1.用set检验是否每个只过去一次 不能直接判断是否==n 可能去过多次
2.发现不符合题意我直接就continue了!致命伤
/* *@Author: GuoJinlong *@Language: C++ */ //#include <bits/stdc++.h> /* * __----~~~~~~~~~~~------___ * . . ~~//====...... __--~ ~~ * -. \_|// |||\\ ~~~~~~::::... /~ * ___-==_ _-~o~ \/ ||| \\ _/~~- * __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~ * _-~~ .=~ | \\-_ '-~7 /- / || \ / * .~ .~ | \\ -_ / /- / || \ / * / ____ / | \\ ~-_/ /|- _/ .|| \ / * |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\ * ' ~-| /| |-~\~~ __--~~ * |-~~-_/ | | ~\_ _-~ /\ * / \ \__ \/~ \__ * _--~ _/ | .-~~____--~-/ ~~==. * ((->/~ '.|||' -_| ~~-/ , . _|| * -_ ~\ ~~---l__i__i__i--~~_/ * _-~-__ ~) \--______________--~~ * //.-~~~-~_--~- |-------~~~~~~~~ * //.-~~~--\ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 神兽保佑 永无BUG */ const int MAX=210; ll cost[MAX][MAX]; ll a[MAX]; set<int>st; set<int>st1; int main(){ int n,m; ll num=0; cin>>n>>m; mms(cost,0); while (m--) { int a,b,c; cin>>a>>b>>c; cost[a][b]=c; cost[b][a]=c; } int k; cin>>k; ll aans=INF; int id; for(int i=1;i<=k;i++){ int N; cin>>N; st.clear(); // cout<<i<<" N "<<N<<endl; for(int j=1;j<=N;j++){ cin>>a[j]; st.insert(a[j]); } if(N!=n){ // cout<<"个数不满足"<<i<<" "<<"继续"<<endl; continue; } int q=cost[0][a[1]]; // cout<<"0-"<<a[1]<<" "<<q<<endl; int z=cost[a[n]][0]; // cout<<a[n]<<"-0"<<" "<<z<<endl; if(q==0||z==0) { // cout<<"起点终点不满足"<<i<<" "<<"继续"<<endl; // cout<<"qi"<<" "<<q<<endl; // cout<<"z "<<z<<endl; continue; } int flag=1; int ans=0; ans+=(q+z); for(int j=1;j<=n-1;j++){ if(cost[a[j]][a[j+1]]==0){ flag=0; } else{ ans+=cost[a[j]][a[j+1]]; } } if(flag&&st.size()==n) { num++; if(aans>ans){ aans=ans; id=i; } } // cout<<i<<" "<<ans<<endl; } cout<<num<<endl; cout<<id<<" "<<aans<<endl; }