hdu2682 最小生成樹

2021-07-12 07:39:14 字數 1237 閱讀 7833

題目大意:n個城市,每個城市有初始歡樂值,城市ab有路連通如果a的歡樂值為質數或者b的歡樂值為質數或者a的歡樂值+b的歡樂值為質數,權值為min(a,min(b , |a-b|))。問將所有城市連在一起的最小花費。

思路:根據規則建圖後,求最小生成樹。

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

//#pragma comment(linker, "/stack:102400000,102400000")

#define maxn 2000050

#define mod 1000000007

#define p 1000000007

#define mem(a , b) memset(a , b , sizeof(a))

#define ll long long

#define ull unsigned long long

#define for(i , n) for(int i = 1 ; i<= n ; i ++)

typedef pairpii;

const long long inf= 0x3fffffff;

int n , m;

int prime[maxn];

int a[605];

int vis[605];

int dist[605];

int graph[605][605];

struct node

}cur;

vectorv[605];

void is_prime()}}

}ll prime3(int cur)

for(int i = 1; i < n; i ++)

}vis[index] = 1;

sum += mincost;

for(int j = 0; j < n; j ++)}}

return sum;

}int main()

}for(int i = 0 ; i < n ; i ++)

}if(!flag) break;

}if(!flag)

printf("%lld\n" , prime3(0));}}

return 0;

}

hdu 1863 最小生成樹

使用並查集,陣列不要太小 include stdio.h int set 200 int n,m typedef struct nodenode,pnode node road 200 void init int find int u return set u int join int u,int ...

hdu 4081 最小生成樹

先求出最小生成樹,然後列舉樹上的邊,對於每條邊 分別 找出這條割邊形成的兩個塊中點權最大的兩個 1.由於結果是a b,a的變化會引起b的變化,兩個制約,無法直接貪心出最大的a b,故要通過列舉 2.不管magic road要加在 加的邊是否是最小生成樹上的邊,都會產生環,我們都要選擇一條邊刪掉 注意...

hdu 1863(最小生成樹)

基礎的最小生成樹問題,不過 要特判條件不足的情況 include include define inf 1 30 int n,m,vis 110 low 110 int map 110 110 int init int prim if pos 1 return 1 代表這當前步驟缺少條件 int k...