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