hdu 4781 Assignment For Princess (2013ACMICPC 成都站 A)
http://acm.hdu.edu.cn/showproblem.php?pid=4781
由于题目太长,这里就不直接贴了,直接说大意吧。
题目大意:有一个n个点,m条边的有向图,每条边的权值分别为1,2,3........m,让你构造满足下列条件的有向图。
1:每两个点之间最多只有一条有向边,且不存在自环。
2:从任意点出发都可以达到其他任意一个点,包括自己。
3:任意一个有向环的权值和都是3的倍数。
思路:首先我们可以将点1到n连成一条链,边的权值分别是1到n-1,然后点n到点1连一条边,若n%3为0或2,则边权值为n,否则边权值为n+2(m>=n+3),现在我们构造出了一个环且满足上述三个条件。那么接下来如何构造剩下的m-n条边呢?
现在我们不管怎么构造都满足第二个条件了,而且现在每个点到自己的距离都是3的倍数。那么如果我要在u,v两点之间连一条全值为len的边,那么只要满足len%3==dist[u][v]%3即可(dist表示原环中两个点之间的距离,自己画一下图应该就能明白),然后在构造的时候还要注意不要违背第一个条件,所以我们可以用map[i][j]来表示i,j之间是否右边,如果按这样构造无法构造出图,则无解。
代码如下:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,m;
int map[85][85],sum[85],vis[5010];
int hash[3]={0,2,0};
struct edge
{
int from,to,len;
}ans[5010];
int solve(int len,int num)
{
int tmp=len%3;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j&&!map[i][j]&&!map[j][i])
{
if(j>i)
{
if((sum[j]-sum[i]+3)%3==tmp)
{
map[i][j]=1;
ans[num].from=i;
ans[num].to=j;
ans[num].len=len;
return 1;
}
}
else
{
if((sum[i]-sum[j]+3+tmp)%3==0)
{
map[i][j]=1;
ans[num].from=i;
ans[num].to=j;
ans[num].len=len;
return 1;
}
}
}
}
}
return 0;
}
int main()
{
//freopen("dd.txt","r",stdin);
int ncase,T=0;
scanf("%d",&ncase);
while(ncase--)
{
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
memset(sum,0,sizeof(sum));
scanf("%d%d",&n,&m);
sum[1]=0;
for(int i=1;i<n;i++)
{
ans[i].from=i;
ans[i].to=i+1;
ans[i].len=i;
vis[i]=1;
map[ans[i].from][ans[i].to]=1;
if(i!=1)
sum[i]=(sum[i-1]+i-1)%3;
}
ans[n].from=n;
ans[n].to=1;
map[n][1]=1;
ans[n].len=n+hash[n%3];
vis[ans[n].len]=1;
sum[n]=(sum[n-1]+n-1)%3;
int num=n,tru=1;
for(int i=1;i<=m;i++)
{
if(!vis[i])
{
tru=solve(i,++num);
if(!tru)
break;
}
}
printf("Case #%d:\n",++T);
if(!tru)
{
printf("-1\n");
continue;
}
for(int i=1;i<=m;i++)
{
printf("%d %d %d\n",ans[i].from,ans[i].to,ans[i].len);
}
}
return 0;
}
hdu 4781 Assignment For Princess (2013ACMICPC 成都站 A)的更多相关文章
- HDU 4781 Assignment For Princess 构造
题意: 构造一个\(N(10 \leq N \leq 80)\)个顶点\(M(N+3 \leq M \leq \frac{N^2} {7})\)条边的有向图,要满足如下条件: 每条边有一个\([1,M ...
- hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)
http://acm.hdu.edu.cn/showproblem.php?pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) ...
- hdu4781 Assignment For Princess(构造)
题目链接:hdu4781 Assignment For Princess 题意:n个点m条边,每条有向边的权值分别是1,2,3…m,一个点能到达任意一个点,没有重边和自环,没有任何两条边的权值相同,任 ...
- HDU 2853 Assignment(KM最大匹配好题)
HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用 ...
- Cloud Foundry 中国群英会【上海站、成都站】资料宣传
关注云计算和PaaS层的童鞋可以了解下: http://www.cloudfoundry-heroes-summit.com/shanghai http://www.cloudfoundry-hero ...
- 大课深度复盘、解密研发效率之道 | 第42届MPD工作坊成都站日程公布!
互联网时代,随着区块链.大数据.人工智能等技术的快速发展,产品迭代速度飞快.在这样的市场环境下,提升研发效率.降低研发成本,同时支撑业务的快速发展,是每个企业都追求的目标之一. 大中型企业如何快速转型 ...
- HDU 5289 Assignment [优先队列 贪心]
HDU 5289 - Assignment http://acm.hdu.edu.cn/showproblem.php?pid=5289 Tom owns a company and he is th ...
- Erda 系列 Meetup「成都站」携手SOFAStack 和你聊聊云原生基础设施建设那点事儿
技术控快上车啦秋天的第一场活动一起来收获技术干货吧! 主题: 云原生基础设施建设的现在及未来时间: 2021 年 9 月 11 日 (周六) 13:30-17:00活动地点: 四川省成都市蚂蚁 C 空 ...
- hdu 2853 Assignment KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...
随机推荐
- MyBatis 实践 -配置
MyBatis 实践 标签: Java与存储 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名任意),其配置内容和顺序如下: pro ...
- Qt之进程间通信(共享内存)
简述 上一节中,我们分享下如何利用Windows消息机制来进行不同进程间的通信.但是有很多局限性,比如:不能跨平台,而且必须两个进程同时存在才可以,要么进程A发了消息谁接收呢? 下面我们来分享另外一种 ...
- HDU 1686 (KMP模式串出现的次数) Oulipo
题意: 求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分. 分析: 一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去. 后来仔细想想,完全不用,直接让模式串向前滑动 ...
- cocos2d-x 小技巧
1.字符串 与 数据结构互转 CCPoint: CCPointFromString(); {x, y} CCSize: CCSizeFromString(); {w, h} CCRect: CCSiz ...
- UVA 821 Page Hopping 网页跳跃(BFS,简单)
题意: 给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数.保证任意点对都可达. 思路: 简单题.直接穷举每个点,进行BFS求该点到其他点的距离.累加后除 ...
- 图像、帧、片、NALU
图像.帧.片.NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论: H.264 是一次概念的革新,它打破常规,完全没有 I 帧.P帧.B 帧的概念, ...
- cimge 这次能够图片大小尺寸
CImage imSrc,imDest;imSrc.Load(……);//读入原始图片imDest.Create(……)//创建新大小的图片imSrc.StretchBlt(imDest.GetDC( ...
- Blog CSS
你好 print("你好.") haode
- NYOJ-779-兰州烧饼
[题目链接:NYOJ-779] 兰州烧饼 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率 ...
- Android Failure [INSTALL_FAILED_OLDER_SDK]
今天编译工程发现 提示“ Failure [INSTALL_FAILED_OLDER_SDK]” 最后发现最小minSdkVersion 超过当前机器的版本,修改配置表中的minSdkVersion, ...