题意:给你n,m,表示n个顶点和m条边,让你构造一个图。
要求
1.1->n最短路为素数
2.最小生成树边权和为prime
3.没有重边
4.边大小[1,1e9]。
(题目给定m>n-1)
题解:
你可以先构造一个 最短路==最小生成树权值和==素数 ,然后剩下的边保证不重复的前提下赋一个大的值就行
具体看代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,m; 5 scanf("%d%d",&n,&m); 6 int prim=100003; 7 printf("%d %d ",prim,prim); 8 printf("1 2 %d ",prim-(n-2)); 9 for(int i=2;i<n;++i) 10 printf("%d %d 1 ",i,i+1); 11 m=m-(n-1); 12 for(int i=1;i<=n;++i) 13 { 14 for(int j=i+2;j<=n;++j) 15 { 16 if(!m) break; 17 printf("%d %d %d ",i,j,2*prim); 18 m--; 19 } 20 } 21 return 0; 22 }