团体程序设计天梯赛(L2-036 网红点打卡攻略 (25 分))
作者:互联网
题目:
思路分析:
这道题踩了一堆坑 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;
}
标签:__,25,int,网红点,--,_-,MAX,打卡,-_ 来源: https://blog.csdn.net/m0_57006708/article/details/121144404