c,c++代码转化为Pascal
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<ctime>#incl...
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<iostream> #include<algorithm> #include<queue> using namespace std; struct node{ int x,y,z; }edge[10005]; int N,M,father[2005]; void _in(int &x) { char t; t=getchar(); while(t<'0'||'9'<t) t=getchar(); for(x=t-'0',t=getchar();'0'<=t&&t<='9';x=x*10+t-'0',t=getchar()); } int _getfather(int x) { if(x!=father[x]) father[x]=_getfather(father[x]); return father[x]; } void _qst_edge(int l,int r) { int i=l,j=r,mz=edge[(i+r)>>1].z; while(i<=j) { while(edge[i].z<mz) i++; while(edge[j].z>mz) j--; if(i<=j) { swap(edge[i],edge[j]); i++;j--; } } if(l<j) _qst_edge(l,j); if(i<r) _qst_edge(i,r); } void _kruskal() { int fx,fy,cnt,k,ans; cnt=k=ans=0; while(cnt<N-1) { k++; fx=_getfather(edge[k].x); fy=_getfather(edge[k].y); if(fx!=fy) { father[fx]=fy; ans=max(ans,edge[k].z); cnt++; } } printf("%d\n",ans); } void _init() { _in(N);_in(M); for(int i=1;i<=M;i++) { _in(edge[i].x); _in(edge[i].y); _in(edge[i].z); } _qst_edge(1,M); for(int i=1;i<=N;i++) father[i]=i; } void _solve() { _kruskal(); } int main() { _init(); _solve(); return 0; }
展开
2个回答
展开全部
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
struct node
{
int x,y,z;
} edge[10005];
int N,M,father[2005];
void _in(int &x)
{
char t;
t=getchar();
while(t<'0'||'9'<t) t=getchar();
for(x=t-'0',t=getchar(); '0'<=t&&t<='9'; x=x*10+t-'0',t=getchar());
}
int _getfather(int x)
{
if(x!=father[x]) father[x]=_getfather(father[x]);
return father[x];
}
void _qst_edge(int l,int r)
{
int i=l,j=r,mz=edge[(i+r)>>1].z;
while(i<=j)
{
while(edge[i].z<mz) i++;
while(edge[j].z>mz) j--;
if(i<=j)
{
swap(edge[i],edge[j]);
i++;
j--;
}
}
if(l<j) _qst_edge(l,j);
if(i<r) _qst_edge(i,r);
}
void _kruskal()
{
int fx,fy,cnt,k,ans;
cnt=k=ans=0;
while(cnt<N-1)
{
k++;
fx=_getfather(edge[k].x);
fy=_getfather(edge[k].y);
if(fx!=fy)
{
father[fx]=fy;
ans=max(ans,edge[k].z);
cnt++;
}
}
printf("%d\n",ans);
}
void _init()
{
_in(N);
_in(M);
for(int i=1; i<=M; i++)
{
_in(edge[i].x);
_in(edge[i].y);
_in(edge[i].z);
}
_qst_edge(1,M);
for(int i=1; i<=N; i++) father[i]=i;
}
void _solve()
{
_kruskal();
}
int main()
{
_init();
_solve();
return 0;
}
帮你格式化一下而已~~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询