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 ...
随机推荐
- Android中shape中的属性大全
---恢复内容开始--- <shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!- ...
- liux vim命令
命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...
- Android开发中如何调用摄像头的功能
我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码 & ...
- ashx-auth-黑色简洁验证码
ylbtech-util: ashx-auth-黑色简洁验证码 ashx-auth-黑色简洁验证码 1.A,效果图返回顶部 1.B,源代码返回顶部 /ImageUniqueCode.ashx &l ...
- Delphi RichEx 图像
unit RichEx; {2005-03-04 LiChengbinAdded:Insert bitmap or gif into RichEdit controls from source fil ...
- 带宽计算-大B与小b的区别
原文来自:http://blog.sina.com.cn/s/blog_4b9c0e3601008yf9.html 在计算机网络.IDC机房中,其宽带速率的单位用bps(或b/s)表示:换算关系为:1 ...
- div模拟的下拉框特效jquery
从网上找来的,感觉不错就拿来分享下 <style type="text/css"> body, ul, li { margin: 0; padding: 0; font ...
- 45度地图遮挡问题解决方案(cocos2d-x)
最近一直在做45度斜视角游戏,也就是isometric等容地图,俗称2.5D.地图上物体的前后遮挡是我遇到的第一个问题,总结一下处理方法. 遮挡问题(不知道术语),就是比如一个角色站在树后面,那么树要 ...
- 【和我一起学python吧】python的一些推荐
看到未名的几篇帖子 使我想起了和python的一些经历,于是写了一篇咚咚. 1 书籍: python的syntax足够简单,semantics也不复杂,不怎么会使人混乱,一般来说看自带的文档足够可以学 ...
- Tkinter教程之Canvas篇(2)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811888 '''Tkinter教程之Canvas篇(2)''''''9.创建item的tag ...