kruskal WA 50 分求助

P1546 [USACO3.1] 最短网络 Agri-Net

find_fa不要inline?
by tuzhewen @ 2020-04-01 16:32:54


@[tuzhewen](/user/117648) dalao 加和不加好像都一样吧 ……
by cstdios @ 2020-04-01 16:33:27


@[cstdios](/user/260980) 但是递归不好加的吧(大雾)
by tuzhewen @ 2020-04-01 16:33:59


数组小了
by 杨氏之子 @ 2020-04-01 16:34:06


``` #include <iostream> #include <cstdio> #include <algorithm> #define ll long long using namespace std; const int INF=505; struct _node_edge { ll x,to_,disv_; } edge[INF<<2]; ll n,fa[INF],tot; ll ans; inline void edge_add(ll x,ll y,ll z) { tot++; edge[tot].to_=y; edge[tot].x=x; edge[tot].disv_=z; return; } ll find_fa(ll x) { if (fa[x]==x) return x; return fa[x]=find_fa(fa[x]); } bool cmp(_node_edge a,_node_edge b) { return a.disv_<b.disv_; } inline void kruskal() { ll cnt=1; sort(edge+1,edge+1+tot,cmp); for (int i=1; i<=tot; i++) { int dx=find_fa(edge[i].x); int dy=find_fa(edge[i].to_); if (dx==dy) continue; ans=ans+edge[i].disv_; fa[dx]=edge[i].to_; cnt++; if (cnt==n) break; } return; } signed main() { scanf("%lld",&n); for (int i=1; i<=n; i++) fa[i]=i; for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) { ll x=0; scanf("%lld",&x); if (j>i && x!=0) edge_add(i,j,x); } kruskal(); printf("%lld\n",ans); return 0; } ``` 我就把INF改大了(ll不知道有没有用)
by tuzhewen @ 2020-04-01 16:37:05


好吧您A了(
by tuzhewen @ 2020-04-01 16:37:53


@[tuzhewen](/user/117648) ~~您 @ 错了~~,非常感谢 dalao 的帮助,数组改大一点就 AC 了。
by cstdios @ 2020-04-01 16:38:11


@[杨氏之子](/user/113202) 也非常感谢这位 dalao 的帮助。
by cstdios @ 2020-04-01 16:38:34


fzx dalao学最小生成树 $\%\%\%\%\%$
by Water_Cows @ 2020-04-01 16:43:09


@[yufan](/user/107253) 您怎么又来了 ……
by cstdios @ 2020-04-01 16:44:29


| 下一页