J - 小panpan学图论

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

小panpan不会图论,所以图论专题他非常刻苦地学习图论。

今天他认真地学习了萌神的ppt,学习了一下Floyd算法,手持两把锟斤拷的他, 口中疾呼烫烫烫,马上找了到OJ上找了道FLoyd的题:

n个点,m边的无向连通图,无重边,无自环,每条边的长度都是1,求任意两点之间的最短距离

—— 出题人acerlawson

小panpan想了想,写了段代码交了上去,他得到了AC!

出题人acerlawson看了一下小panpan的程序,发现他写了个错误的Floyd, 他选了k个点出来,存在a[]数组里,核心代码如下:

d[i][j] // i,j之间的最短距离
a[i] // 小panpan事先选好的点 for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j)
d[i][j] = 0;
else
d[i][j] = INF;
}
} for (int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
d[u][v] = 1;
d[v][u] = 1;
} for (int r = 1; r <= k; r++) {
v = a[r];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
d[i][j] = min(d[i][j], d[i][v] + d[v][j]);
}

因为数据太水了,所以小panpan得到了AC。 为了让小panpanWA掉,acerlawson想要出一组数据卡掉小panpan的代码,但是acerlawson忙于陪妹子,所以他找你帮忙。

给出一个n个点m条边的无重边无自环无向连通图,让小panpan的代码得到Wrong Answer

Input

第一行为三个整数n,m,k(3≤n≤400,n−1≤m≤n(n−1)2,2≤k≤n),分别表示图的顶点数,边数和小panpan选的点的数量

第二行k个整数x1,x2,...,xk,(1≤xi≤n),表示小panpan选的点

Output

输出m行,每行两个整数u和v,表示一条无向边(u,v)

如果有多个解,输出任意可行解

如果无论如何小panpan都能AC,则输出No

Sample input and output

Sample Input Sample Output
4 3 2
1 2
1 3
2 3
2 4
4 3 4
1 2 3 4
No

解题思路:

这是一道构造题.

PPT上那种情况是我们构造的关键.

即我们放一个选择的点在最右边,它的左边一个没有被选的点,再左边整成一个稠密图,容易证明最多支持的边数是:

(n-1)*(n-2) / 2 + x ( x 为没选的点的数量)

图:

这样,我们就按照这种方法构造即可,注意到如果选了所有点,是构造不出来WA的图的,这点要注意

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std; typedef pair <int ,int > Edge; vector<int>s1; //除掉q1,q2的集合
int q1,q2;
vector<int>s2; //没有选的点集合
vector<Edge>ans;
bool use[]; //maxedgenumber = (n-1)*(n-2) / 2 + n - k int main(int argc,char *argv[])
{
int n,m,k;
cin >> n >> m >> k;
if (k == n || *m > (n-)*(n-) + *n - *k)
cout << "No" << endl;
else
{
memset(use,false,sizeof(use));
int temp1;
int ok = ;
for(int i = ; i < k ; ++ i)
{
int u;
cin >> u;
use[u] = true;
temp1 = u;
}
q2 = temp1;
for(int i = ; i <= n ; ++ i)
if(!use[i])
{
q1 = i;
break;
}
for(int i = ; i <= n ; ++ i)
if (!use[i] && i != q1)
s2.push_back(i);
for(int i = ; i <= n ; ++ i )
if(i != q1 && i != q2)
s1.push_back(i);
int tot = ;
for(int i = ; i < s1.size() - ; ++ i)
{
ans.push_back(Edge(s1[i],s1[i+]));
tot++;
}
ans.push_back(Edge(s1[s1.size()-],q1));
ans.push_back(Edge(q1,q2));
tot += ;
for(int i = ; i < s1.size() ; ++ i)
for(int j = i + ; j < s1.size() ; ++ j)
{
if (tot < m)
{
ans.push_back(Edge(s1[i],s1[j]));
tot++;
}
}
int ptr = ;
while(tot < m)
{
if (ptr >= s1.size() - )
break;
ans.push_back(Edge(s1[ptr++],q1));
tot++;
}
ptr = ;
while(tot < m)
{
if (ptr == s2.size())
{
ok = ;
break;
}
if (s2[ptr] == q1)
{
ptr++;
continue;
}
tot++;
ans.push_back(Edge(s2[ptr++],q2));
}
if (!ok)
printf("No\n");
else
{
for(int i = ; i < ans.size() ; ++ i)
printf("%d %d\n",ans[i].first,ans[i].second);
}
}
return ;
}

UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>的更多相关文章

  1. UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>

    L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  2. UESTC_韩爷的情书 2015 UESTC Training for Graph Theory<Problem H>

    H - 韩爷的情书 Time Limit: 6000/2000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others) Subm ...

  3. UESTC_邱老师的脑残粉 2015 UESTC Training for Graph Theory<Problem D>

    D - 邱老师的脑残粉 Time Limit: 12000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  4. UESTC_秋实大哥带我飞 2015 UESTC Training for Graph Theory<Problem B>

    B - 秋实大哥带我飞 Time Limit: 300/100MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  5. UESTC_排名表 2015 UESTC Training for Graph Theory<Problem I>

    I - 排名表 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  6. UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>

    C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  7. UESTC_男神的约会 2015 UESTC Training for Dynamic Programming<Problem J>

    J - 男神的约会 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  8. UESTC_王之盛宴 2015 UESTC Training for Graph Theory<Problem K>

    K - 王之盛宴 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  9. UESTC_传输数据 2015 UESTC Training for Graph Theory<Problem F>

    F - 传输数据 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

随机推荐

  1. c语言指针与结构体

    #include <stdio.h> #include <stdlib.h> struct mydata { int num; ]; }; void main1() { /*i ...

  2. myeclipse实现Servlet实例(3) 通过继承HttpServlet接口实现

    (1) 在软件公司 90%都是通过该方法开发. //在HttpServlet 中,设计者对post 提交和 get提交分别处理   //回忆 <form action="提交给?&qu ...

  3. Struts分页的一个实现

    在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理.要是稍不留神,时不时出点问题就更郁闷了.我现在做的一个 ...

  4. art.dialog

    关闭指定弹出窗: art.dialog({ id: 'hetong' }).close(); 关闭所有的iframe弹出窗,art.dia.close();

  5. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  6. HttpServletRequest对象方法的用法(转)

    原文地址:http://blog.csdn.net/xh16319/article/details/8450715 原文作者:ITSTAR 文章太赞,忍不住就想转..... 1. 获得客户机信息    ...

  7. Windows下模拟Linux开发

    1.背景 Linux环境下开发是大势所趋,也是开发者必须掌握的技能.然windows系统已深入人心,实在不想放弃windows下的成熟应用,因此可以在Windows上模拟一个Linux系统.这样就满足 ...

  8. 使用AWS的EC2服务器,进行跳墙

    选Ubuntu的服务器 一开始先设置Root,命令:su root 在安装之前,先Update一下源:apt-get update update完就可以安装: 1.安装pi,命令:apt-get in ...

  9. Android开发之DatePickerDialog与TimePickerDialog的功能和使用方法具体解释

    DatePickerDialog与TimePickerDialog的功能比較简单,使用方法也非常easy.仅仅要以下两步就可以. Ø  通过newkeyword创建DatePickerDialog.T ...

  10. JMeter脚本参数化和断言设置( CSV Data Set Config )

    用Badboy录制了Jmeter的脚本,用Jmeter打开后形成了原始的脚本.但是在实际应用中,为了增强脚本的多样性,就要使脚本参数化.这里我以登录为例,参数化用户账号与用户密码.  图1 :原始脚本 ...