CF24A Ring road 题解
不理解为什么那么多人想得复杂了。
这里提供一种贪心的方法。
其实很好想,思路如下:
一共有两种情况,取其较小的即可。
第一种方法:
凡是遇到一个已经存了的点,就用 \(cnt\) 累加费用,然后存边。
第二种方法:
与第一种相反,修改剩余。
代码也很好写,没什么可讲的。
#include<bits/stdc++.h>
using namespace std;
int n,x,y,z;
int cnt,sum;
bool from[110],to[110];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y>>z;
if(from[x]) from[y]=1,to[x]=1,cnt+=z; //如果有连接两点的边,cnt 累计并反向存边
else if(to[y]) from[y]=1,to[x]=1,cnt+=z;
else from[x]=1,to[y]=1; //如果没有,则直接存
sum+=z; //累计总和
}
cout<<min(sum-cnt,cnt); //输出两种方法的最小的
return 0;
}
我的代码有防作弊哦!

浙公网安备 33010602011771号