玄关 | P1396 50pts WA 求调
  • 板块学术版
  • 楼主YMnRb
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/30 22:24
  • 上次更新2023/12/1 14:45:53
查看原帖
玄关 | P1396 50pts WA 求调
812740
YMnRb楼主2023/11/30 22:24

Code:

#include <iostream>
using namespace std;

namespace cmp {
    template<typename _Tp> inline _Tp min(const _Tp& a, const _Tp& b) { return a < b ? a : b; }
    template<typename _Tp> inline _Tp max(const _Tp& a, const _Tp& b) { return a > b ? a : b; }
}
struct edge { int u, v, w, nxt; } e[40004];
struct node { int fstedge = -1, ans = 0x3fffffff; bool vis = 0; } nd[10004];
int n, m, s, t, u, v, w; 

void addedge(int u, int v, int w, int i) {
    if (nd[u].fstedge == -1) nd[u].fstedge = i;
    e[i] = (edge){u, v, w, nd[u].fstedge};
    nd[u].fstedge = i;
}
int dfs(int u, int v) {
//**/printf("in function dfs(u = %d): \n", u); 
    if (u == v) return 0;
    if (nd[u].vis) return nd[u].ans;
    nd[u].vis = 1;
    int i = nd[u].fstedge;
    while (true) {
        nd[u].ans = cmp::min(nd[u].ans, cmp::max(e[i].w, dfs(e[i].v, v)));
//        printf("      update nd[%d].ans = %d after dfs(%d); \n", u, nd[u].ans, e[i].v);
        if (e[i].nxt == i) break;
        else i = e[i].nxt;
    }
//**/printf("   function dfs(u = %d) return value %d; \n", u, nd[u].ans); 
    return nd[u].ans;
}

int main() {
    cin >> n >> m >> s >> t;
    while (m--) {
        cin >> u >> v >> w;
        addedge(u, v, w, m << 1);
        addedge(v, u, w, (m << 1) | 1);
    }
//    for (int i = 1; i <= n; ++i) {
//    	int j = nd[i].fstedge;
//	    while (true) {
//	    	printf("e[%d] = %d %d %d %d\n", j, e[j].u, e[j].v, e[j].w, e[j].nxt);
//	        if (e[j].nxt == j) break;
//	        else j = e[j].nxt;
//	    }
//	}
    cout << dfs(s, t);
    return 0;
}
2023/11/30 22:24
加载中...