牛客网 道路建设(prime+kruskal 算法)两种方法实现

什么prime算法 不就是迪杰特斯拉么....

牛客网上面无论考虑图是否连通都可以过

还有城市序号从1开始,我也踩了....

踩雷王就是我 我是酷炫的小菜鸡

题目链接:https://www.nowcoder.com/acm/contest/76/B

这是prime算法(考虑了图是否连通)

 /*
 qq:1239198605
 ctgu_yyf
        */

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
int inf=99999;
int map[105][105],dis[105],vis[105];
int c,n,m; 
void prime(int x)
{
	memset(vis,0,sizeof(vis));
	vis[x]=1;

	
	for(int i=1;i<=m;i++)
	dis[i]=map[x][i];
    
	dis[x]=0; 
	
	for(int i=1;i<=m;i++)
	{
		if(i==x)
		continue;
		
		int min=inf;
		int u=-1;
		for(int j=1;j<=m;j++)
		{
			if(dis[j]>c>>n>>m)
   {
   	int flag=0;
   	for(int i=1;i<=m;i++)
   	for(int j=1;j<=m;j++)
   	map[i][j]=inf;
   	
   	
   	
   	for(int i=0;i>v1>>v2>>h;
	   map[v1][v2]=min(map[v1][v2],h);
	   map[v2][v1]=min(map[v2][v1],h);
   }
   
   prime(1);
   
   int ans=0;
   for(int i=1;i<=m;i++)
   {
   //	cout<<"**"<c)
   flag=1;
   
   if(flag==0)
   cout<<"Yes"<

然后我试着用kruskal解一遍也过了

kruskal什么花里胡哨的东西,不就是个并查集么.....

然后是kruskal代码(没考虑图是否连通):

 /*
 qq:1239198605
 ctgu_yyf
        */

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
struct Edge{
	int u,v,cost;
}; 

Edge edge[10005];
int c,n,m;
int par[105];

void init(int n)
{
	for(int i=0;i>c>>n>>m)
   {
   
   
   for(int i=0;i>edge[i].u>>edge[i].v>>edge[i].cost;
   
   if(kruskal()<=c)
   cout<<"Yes"<

两个都可以过。

你可能感兴趣的:(ACM,算法)