题意大意:给出一个输出文件,求输入。

  1.满足所求的输入文件是一张图,n个点,m条边,所用算法是k(k在给出的输出文件中给出了)

  2.算法是图论算法?!k基本上→两位数组成,若十位数相同,说明基本算法可能是相同的。

  3.给出一个可执行文件,可以在终端中运行自己造出的数据,从而猜测算法。

  4.你所给出的图不能有重边,但可以有自环,边权<=2*10^4

  5.p是在给出的输出文件中给定的一个参数,这个参数由你所造出的图由某种计算方式所决定的。

  

  先挖坑。。。感觉是一个很有意思的构造+XJB乱搞题,假设是WC的话,我能搞2个半个小时提答,那么。。。。。

   

  闷声滚大粗

  Notice:这题直接看题解没意思,还是要先做题。。。


  (1)喜闻乐见的01矩阵,再加上样例的那个例子,就是A(i,j)表示是否有i向j连边的意思。

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m;
int main()
{
yyj("nm1");
cin>>n;
llg tot=;
for (llg i=;i<=n;i++)
for (llg j=;j<=n;j++)
{
llg x;
//tot++;
cin>>x;
if (x) tot++;
if (x) cout<<i<<" "<<j<<""<<endl;
}
cout<<tot;
return ;
}

  (2)算法编号k=10,新的图论算法,随便自己造个图用给出的程序试一试发现就是以1为原点的单源最短路,p就是边的数目。

    考虑如何构造:

    1.显然一号点向每个点连一条所要求的权值的边就满足了最短路的条件,但是边数只有n-1条,即p'!=p,可以get 4分。

    2.按照上面的做法打完拿了程序一测正确性发现GG,我之前没看到边权<=2*10^4,好吧,按照所要求的最短路长度排序,按照从小到达的顺序处理,如果小于2*10^4直接和一号点相连,不然找到之前的处理过的点,而且当前点要求的权值减去处理过的点的权值小于等于2*10^4中权值最小的那一个连边,考虑到p的限制,在已经处理过的最小权值的可连边的点之后的点再向待处理的点连出的边将不对答案产生影响。

    

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,p,k;
bool d[maxn][maxn]; struct node
{
llg p,val;
}a[maxn];
bool cmp(const node&a,const node&b) {return a.val<b.val;}
int main()
{
yyj("nm2");
cin>>n>>k>>p;
for (llg i=;i<=n;i++)
{
a[i].p=i;
cin>>a[i].val;
}
sort(a+,a+n+,cmp);
p-=n;
p++;
for (llg i=;i<=n;i++)
{
llg j;
for (j=;j<i;j++)
if (a[i].val-a[j].val<=)
{
cout<<a[j].p<<" "<<a[i].p<<" "<<a[i].val-a[j].val<<endl;
break;
}
j++;
while (p> && j<i)
{
p--;
cout<<a[j].p<<" "<<a[i].p<<" "<<<<endl;
j++;
}
}
return ;
}

  (3)算法编号k=11,嗯,类似于最短路,但是这个点还是要多试试,一开始我认为是求到每个点的不同路径的最短路的数目,我靠不会构啊,再去试了几组数据之后发现:

      所求为所有点之间的最短路,但是和边权没有关系,即边权默认为1,p为边数。

   沉思。。。。。没办法了打一个暴力,想到优化显然矩阵中为1点的相当于所对应的(x,y)一定连了一条边。再一看有400个1。p也是400,在想想这很显然啊,连出了所有为1的边之后答案就确定了。

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,p,k;
bool d[maxn][maxn]; struct node
{
llg p,val;
}a[maxn];
bool cmp(const node&a,const node&b) {return a.val<b.val;}
int main()
{
yyj("nm3");
cin>>n>>k>>p;
cout<<n<<" "<<p<<" "<<k<<endl;
for (llg i=;i<=n;i++)
{
for (llg j=;j<=n;j++)
{
llg x;
cin>>x;
if (x==) cout<<i<<" "<<j<<""<<endl;
}
}
return ;
}

  (4)算法编号k=12,最短路。。。似乎是次短路欸,但是第一个点居然有权值,这会在一开始迷惑住我们,但是多试几次就会发现点1的次短路是经过点1的最短环的长度,那么我们考虑构造一个装置增长每个点的路径的长度,这样就类似于第k=10的算法了。

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
int d[],v[],q[];
int i,j,k,n=,m=,P=;
int main()
{
yyj("nm4");
scanf("%*d %*d %*d");
for (i=;i<=n;i++){scanf("%d",&d[i]);if (d[i]==) P=i;}
for (i=;i<=n;i++)
if (i != P) d[i]-=;
int tmp=d[];
j=; d[]=;
for (int x=; x<=; x++)
{
k=j; q[j]=;
for (i=;i<=;i++)
if (i!=P && d[i]>d[j] && d[i]<=d[j]+)
{
if (d[i] > d[k]) k=i;
printf("%d %d %d\n",j,i,d[i]-d[j]),m++;
if (j==) v[i]=;
}
j=k;
}
d[]=tmp;
for (i=;i<=n;i++)
if (d[i]<d[] && d[i]>d[]-) break;
printf("%d %d %d\n",i,,d[]-d[i]);
printf("%d %d %d\n",,P,d[P]-d[]);
m += ;
for (i=;i<=n;i++)if (v[i]) printf("%d %d %d\n",P,i,d[i]+-d[P]+d[]),m++;
for (i=;i<=n;i++)
if (!q[i])
for (j=; j<=n; j++)
if (d[i]+>d[j])
{
printf("%d %d %d\n",i,j,);
m++;
if (m==) return ;
}
return ;
}

  (5)算法编号k=20,新的算法,既然是2.0那么应该是送分的,造几组数据之后发现答案输出了n个数,每一个数都小于n,并且有很多是相同的。考虑一下,这不就是强连通分量么,每一个数字表示他这个点所属于的这个强连通分量的最小点的编号,p是强连通分量的数目,给出的输出中也只有p个不同的数字。那就很好做了,既然和边数没有关系,把属于同一个强连通分量的点拉出来连成一个环就可以了。

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,k,p,tot,c[maxn]; vector<llg>a[maxn]; int main()
{
yyj("nm5");
cin>>n>>k>>p;
for (llg i=;i<=n;i++) cin>>c[i];
for (llg i=;i<=n;i++) a[c[i]].push_back(i);
for (llg x=;x<=n;x++)
{
llg w=a[x].size();
for (llg i=;i<w;i++)
{
tot++;
cout<<a[x][i]<<" "<<a[x][i-]<<""<<endl;
}
if (w>=)
{
cout<<a[x][]<<" "<<a[x][w-]<<""<<endl;
tot++;
}
}
cout<<tot;
return ;
}

  (6))算法编号k=21,这个p是个什么鬼,试了试发现之和图的构型有关和权值无关,那么n=8,管他是什么,爆搜就可以了。(考你会不会用终端)

 



  (7)算法编号k=22,又和上面是一个节奏,这次n更大了,GG。。1分走人(挖坑)

 

 

  (8)算法编号k=30,以为是个水的,但看了数据真是一脸懵逼,搞了好久才发现求的是这个图的匹配数量(一般图最大匹配),没什么技术含量,p=61*100,下面那一行给的是匹配数,那么构一个前面61个点,后面100个点(及所有点)的图出来即可。(一共一百个点)

    

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,k,p;
int main()
{
yyj("nm8");
cin>>n>>k>>p;
cout<<n<<" "<<p<<" "<<k<<endl;
for (llg i=;i<=;i++)
for (llg j=;j<=;j++)
{
cout<<i<<" "<<j<<""<<endl;
}
return ;
}

    


  (9)算法编号k=31,把一个点拆成了两个点之后(最小路径覆盖的那种拆分),然后二分图匹配之后对应i位置输出的是匹配到右边的第j个。可是方案不止一种.

  以上口胡,求的是字典序最小的排列,使得(i,xi)有边。尝试发现是字典序最小的。

  

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define llg long long
#define maxn 2010
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,p,f[maxn],k[maxn][maxn];
int main()
{
yyj("nm9");
scanf("%lld %*d %lld", &n, &m);
for (llg i=;i<=n;i++) scanf("%lld",&f[i]);
for (llg i=;i<=n; i++)
{
for (llg j=;j<i;j++) printf("%lld %lld 1\n",i,f[j]), k[i][f[j]]=;
for (llg j=f[i];j<=; j++) if (!k[i][j]) printf("%lld %lld 1\n", i, j);
}
return ;
}

  (10)算法k=13,不要问我是怎么奇妙的get到了这个点的意思(大概是spfa选手的缘故?),似乎就是对于这个图的spfa增广队列的顺序,而且这个顺序还是错的(同级增广编号小的点在前)。。。。MDZZ不会啊,拿下1分走人。  挖坑,会了再补。

UOJ #56. 【WC2014】非确定机的更多相关文章

  1. 生成一个ipa的包,使非开发机也能安装成功 (Xcode5.1)

    for example: 想为com.apple.cloud的bundle identifier生成一个非开发机也能安装的ipa包.你需要一个apple的企业账号(apple有两种账号:开发者账号和企 ...

  2. Docker4Windows -- 从外部(非本机host)访问 由docker container运行的程序

    背景 当我们在windows 上面运行docker container的时候,我们需要借助于模拟器(例如,Virtual box/Hyper V),她的目的主要是在我们的windows系统上面模拟出一 ...

  3. [转帖]SQLSERVER 使用触发器实现 禁用sa用户 在非本机登录

    原贴地址: https://blog.csdn.net/reblue520/article/details/51580102 具体的方法为: 创建一个触发器 CREATE TRIGGER forbid ...

  4. Android Studio打开非本机项目比较慢的问题。

    使用Android Studio打开其他项目的时候,如果使用的AS版本.gradle不同的话,会在打开项目的时候下载gradle版本,网速不好的情况下回非常的慢. 解决方案: 1.将本机创建的AS项目 ...

  5. UOJ#55 [WC2014]紫荆花之恋

    题目描述 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来. 仔细看看的话,这个大树实际上是一个带权树. ...

  6. 【转】VMware Workstation 11 永久激活码key 非注册机

    原文网址:http://www.landiannews.com/archives/12565.html 昨天我们发布了<跨越式提升:VMware Workstation 11 发布 附下载地址& ...

  7. vs2010用iis5作为调试服务器从而允许非本机电脑访问项目网站

    工作的时候经常遇见这2种情况 1,和设备端的同事调程序,但是他们却不能访问vs自带的web服务器 2,写好的程序在vs中运行一点问题都没有,一发布到iis就问题一大堆 后来在终于有了一个比较好的解决办 ...

  8. 在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容

    一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅. 图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接 ...

  9. PHP正则中的捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可 ...

随机推荐

  1. [js]ext.js探索

    Ext JS 经常会遇到布局等头疼的问题,一直在用bootstrap,但是我不喜欢这玩意出的效果想找个合适的js架构入手 http://examples.sencha.com/extjs/6.6.0/ ...

  2. python内置函数大全(分类)

    python内置函数大全 python内建函数 最近一直在看python的document,打算在基础方面重点看一下python的keyword.Build-in Function.Build-in ...

  3. Centos上把新安装的程序添加到系统环境变量的两种方法

    1.软链接 通过命令查看当前系统的环境变量信息,然后软连接形式把程序的地址连接到已经在环境变量中的目录中 echo "$PATH" > /root/tmp 结果如下: /us ...

  4. EM算法小结

    一.什么是EM算法? EM算法是机器学习中一个很重要的算法,即期望最大化算法,主要包括以下两个步骤: E步骤:estimate the expected values M步骤:re-estimate ...

  5. python -- 解决If using all scalar values, you must pass an index问题

    [问题描述] 在将dict转为DataFrame时会报错:If using all scalar values, you must pass an index 例如: summary = pd.Dat ...

  6. iOS 建立项目过滤机制 —— 给工程添加忽略文件.gitignore

        目前iOS 项目 主要忽略 临时文件.配置文件.或者生成文件等,在不同开发端这些文件会大有不同,如果 git add .把这些文件都push到远程, 就会造成不同开发端频繁改动和提交的问题. ...

  7. SpringBoot之RESTFul风格的接口调用(jQuery-Ajax)

    一.Get $.ajax({ type: "get", url: "url地址", async: true, dataType:"json" ...

  8. Python之路----各类推导式

    [每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 列表推导 ...

  9. MySQL数据库----存储引擎

    什么是存储引擎? 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操 ...

  10. Python入门之获取当前所在目录的方法详解

    #本文给大家讲解的是使用python获取当前所在目录的方法以及相关示例,非常的清晰简单,有需要的小伙伴可以参考下 sys.path 模块搜索路径的字符串列表.由环境变量PYTHONPATH初始化得到. ...