题目链接:http://codeforces.com/contest/916/problem/C
题目大意:
用(n)个结点,(m)条边(每条边的权值范围为[1, 109]) 构造出一个无向带权图(无自环、无重边),使其最小生成树的权值之和以及从点(1)到点(n)的最短路
都是质数。
知识点: 构造
解题思路:
先构造一条从(1)到(2),再到(3),再依次类推直到( )的边,使其权值总和为(1000033),再随意连权值为(1e9)的边,直到有(n)条边为止,注意不要有重边。
AC代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 100; 5 6 int main(){ 7 int n,m; 8 scanf("%d%d",&n,&m); 9 printf("1000033 1000033 "); 10 for(int i=2;i<n;i++) 11 printf("%d %d %d ",i-1,i,1); 12 printf("%d %d %d ",n-1,n,1000035-n); 13 int ind=m-(n-1); 14 for(int i=1;i<=n;i++){ 15 for(int j=i+2;j<=n;j++){ 16 if(ind==0) return 0; 17 printf("%d %d 1000000000 ",i,j); 18 ind--; 19 } 20 } 21 return 0; 22 }