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 ...
随机推荐
- Jqgrid入门-显示基本的表格(一)
首先对Jqgrid网格插件做个简要的说明.在众多的表格插件中,Jqgrid的特点是非常鲜明的. 特点如下: 完整的表格呈现与运算功能,包含换页.栏位排序.grouping.新增.修改及 ...
- LeetCode Swap Nodes in Pairs 交换结点对(单链表)
题意:给一个单链表,将其每两个结点交换,只改尾指针,不改元素值. 思路:迭代法和递归法都容易写,就写个递归的了. 4ms /** * Definition for singly-linked list ...
- ES PES TS
1.流媒体系统结构 ES:elemental stream 基本数据流: PES:packet elemental stream分组的基本数据流: 然后把PES打包成PS ,TS流,PS:progra ...
- tomcat 调优
1 总是遇到read time out ,socket什么的 <Executor name="tomcatThreadPool" namePrefix=& ...
- Oracle中如何判断一个字符串是否含有汉字
看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...
- CSS HACK区别IE6、IE7、IE8、Firefox兼容性
相信不少人,都特别清楚CSS HACK,而其中也是区别IE6.IE7.IE8.Firefox兼容性问题用的,CSS hack由于不同的浏览器,对CSS的解析认识不一样,因此会导致生成的页面效果不一样. ...
- andorid 文字颜色selector的使用
文字颜色selector的使用 创建名称为selector_1的Android项目,在res/color文件夹下创建名称为button_selector_text.xml的文字颜色配置文件,代码如下 ...
- CF 577C Vasya and Petya's Game
题意:一个游戏,A童鞋在1~n的范围里猜一个数,B童鞋询问一个集合,A童鞋要对集合里每个数做出回答,他猜的数能否给整除,B要通过这些答案得到A猜的数,最少需要猜哪些数? 解法:一个数可以由若干个质数的 ...
- Andriod中绘(画)图----Canvas的使用详解
http://blog.csdn.net/qinjuning/article/details/6936783
- HDU-4882 ZCC Loves Codefires
http://acm.hdu.edu.cn/showproblem.php?pid=4882 ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Ot ...