题目大意

给你一个\(n\)个点的环,每条边有方向,改变第\(i\)条边的方向代价为\(w_i\),问将其改为强连通图的最小代价。\(n\leqslant100\)

题解

求出把边全部改为顺时针和全部改为逆时针的代价,较少的输出即可

卡点

C++ Code:


#include <cstdio>
#include <iostream>
#include <algorithm>
const int maxn = 111; int head[maxn], cnt;
struct Edge { int to, nxt; } e[maxn << 1];
void addedge(int a, int b) {
e[++cnt] = (Edge) { b, head[a] }; head[a] = cnt;
e[++cnt] = (Edge) { a, head[b] }; head[b] = cnt;
} int n, dep[maxn], l[maxn], r[maxn], w[maxn], res1, res2;
void dfs(int u) {
for (int i = head[u], v; i; i = e[i].nxt) {
v = e[i].to;
if (!dep[v]) dep[v] = dep[u] + 1, dfs(v);
}
} int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n;
for (int i = 1; i <= n; ++i) {
std::cin >> l[i] >> r[i] >> w[i];
addedge(l[i], r[i]);
}
dfs(dep[1] = 1);
for (int i = 1; i <= n; ++i) {
if (dep[r[i]] != dep[l[i]] % n + 1) res2 += w[i];
else res1 += w[i];
}
std::cout << std::min(res1, res2) << '\n';
return 0;
}

最新文章

  1. php调用web service接口(.net开发的接口)
  2. CornerStone的使用
  3. TransactionScope 之分布式配置
  4. 限制EditText 输入的字节数
  5. markdown 基本语法
  6. JStorm之Nimbus简介
  7. pajax
  8. git 创建远程仓库
  9. MyBatis 源码分析——动态SQL语句
  10. HTML基础教程-段落
  11. ssh三大框架集成后,jsp中采用forword标签提交时会报错的解决方案
  12. 强大的图片展示插件,JQuery图片预览展示插件
  13. A Statistical Model for Scientific Readability-paper
  14. windows下matplotlib编译安装备忘
  15. C++ code:向量操作之添加元素
  16. 如何对 PHP 代码加密?
  17. Centos中查看系统信息的常用命令
  18. ES6-Array
  19. python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for
  20. Java网络通信基础编程

热门文章

  1. aps系统切换切记“三要三不要”
  2. Python学习日记(四十一) Mysql数据库篇 九
  3. Mycat高可用解决方案一(mysql安装)
  4. centos 查看硬盘情况
  5. SpringCloud2.0 Hystrix Feign 基于Feign实现断路器
  6. ROS官网新手级教程总结
  7. iOS开发xib控件删不掉,修改xib运行不发生改变,修改xib不管用
  8. V4L2视频采集原理
  9. 架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)
  10. LIST OF BEST OPEN SOURCE BLOCKCHAIN PLATFORMS