把v和2结点交换,
1和v连,其他点和v之间可以互相连。
#include <iostream> #include <cstdlib> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; int n,m,v,flag,i,cnt,j; int main() { while(~scanf("%d%d%d",&n,&m,&v)) { flag=0; if((n-1)*(n-2)/2+1<m) flag=1; if(m<n-1) flag=1; if(flag) { printf("-1\n"); continue; } cnt=n-1; for(i=1;i<n;i++) { if(i==2) printf("%d ",v); else if(i==v) printf("%d ",2); else printf("%d ",i); if(i+1==2) printf("%d\n",v); else if(i+1==v) printf("%d\n",2); else printf("%d\n",i+1); } for(i=2;i<n&&cnt!=m;i++) { for(j=i+2;j<=n&&cnt!=m;j++) { cnt++; if(i==2) printf("%d ",v); else if(i==v) printf("%d ",2); else printf("%d ",i); if(j==2) printf("%d\n",v); else if(j==v) printf("%d\n",2); else printf("%d\n",j); } } } return 0; }
CodeForces 22C System Administrator
时间: 2024-10-07 04:34:53