计蒜客NOIP模拟赛(2)D1T3 深黑幻想
【问题描述】
凡终于发愤图强,决定专心搞OI,不再玩纸牌和坑钱了!没过多久就飘飘然了,总是陷入自己进了集训队的深黑幻想之中。
样听说了之后,决定考一考凡欧拉回路怎么写。
样:“我给你出一道题啊,是欧拉回路的,有N个点……”
凡:“欧拉回路有什么卵用?你看Epacs不会写也能进集训队!”
样:“他不会写欧拉回路,但他会做题啊,比如说这道题……
“有N个点,M条奇怪的单向边,每个边有三个参数Ai,Bi,Ci,你可以指定这条边是从Ai连向Bi还是从Ai连向Ci,要求你构造一种方案使得把这M条边都指定完了之后,每个点的出度和入度相等!”
凡:“这题我会做啊,但是这tmd和欧拉回路有什么关系?!”
【输入格式】
第一行两个正整数N,M,表示点的数目与边的数目
接下来M行,每行三个正整数,代表Ai,Bi,Ci,含义如题目中所示
【输出格式】
输出一个长度为M的由01组成的字符串代表一个合法解
其中第i个位置为0代表Ai向Bi连边,为1代表Ai向Ci连边
如果有多组解,输出任意一组即可,保证存在合法解
【样例输入】
3 2
1 2 3
2 1 3
【样例输出】
00
【数据范围与约定】
测试点编号 |
N,M |
特殊性质1 |
1 |
≤ 10 |
|
2 |
≤ |
|
3 |
≤ |
√ |
4 |
≤ |
√ |
5 |
≤ |
√ |
6 |
≤ |
|
7 |
≤ |
|
8 |
≤ |
|
9 |
≤ |
|
10 |
≤ |
特殊性质1:
保证所有的Ci=Bi+1
对于所有数据,保证1<=Ai,Bi,Ci<=N,但是不保证Ai,Bi,Ci互不相同。
这个题目的主要思想源于混合图求欧拉回路算法
我们考虑一开始让Ai全部连向Bi,这样会有一些点度数不为0。
接下来建一张网络流图,由Ci向Bi连边,源点向所有入度比出度大的点连边,
所有出度比入度大的点向汇点连边。
这样每有一个流量流过,就相当于将一条边由“Ai连向Bi”调整为“Ai连向Ci”
最后我们只需要让程序自己去跑网络流检验一下输出方案即可
相信有很多其他的网络流做法可以过掉这道题
%%%%SAC大佬
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct Node
{
int next,to,dis;
}edge[];
int head[],num,cur[],dist[],n,m,du[];
void add(int u,int v,int dis)
{
edge[num].next=head[u];
edge[num].to=v;
edge[num].dis=dis;
head[u]=num++;
edge[num].next=head[v];
edge[num].to=u;
edge[num].dis=;
head[v]=num++;
}
bool bfs(int S,int T)
{
int i;
memset(dist,-,sizeof(dist));
queue<int>Q;
Q.push(S);
dist[S]=;
while (!Q.empty())
{
int u=Q.front();
Q.pop();
for (i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if (edge[i].dis>&&dist[v]==-)
{
dist[v]=dist[u]+;
Q.push(v);
}
}
}
if (dist[T]==-) return ;
return ;
}
int dfs(int x,int flow,int des)
{
int res=;
if (flow<=||x==des) return flow;
for (int &i=cur[x];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if (dist[v]==dist[x]+&&edge[i].dis)
{
int tmp=dfs(v,min(flow-res,edge[i].dis),des);
if (tmp<=) continue;
edge[i].dis-=tmp;
edge[i^].dis+=tmp;
res+=tmp;
if (res==flow) return res;
}
}
return res;
}
int Max_flow()
{
int ans=;
while (bfs(,n+))
{
int a=;
memcpy(cur,head,sizeof(cur));
while (a=dfs(,2e9,n+)) ans+=a;
}
return ans;
}
int main()
{int i,a,b,c,tot=;
cin>>n>>m;
memset(head,-,sizeof(head));
for (i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(c,b,);
du[b]--;du[a]++;
}
for (i=;i<=n;i++)
tot+=abs(du[i]);
tot/=;
for (i=;i<=n;i++)
{
if (du[i]>) add(,i,du[i]);
else add(i,n+,-du[i]);
}
if (Max_flow()==tot)
for (i=;i<=m;i++)
printf("%d",edge[i*-].dis^);
}
计蒜客NOIP模拟赛(2)D1T3 深黑幻想的更多相关文章
- 计蒜客NOIP模拟赛4 D1T3 小X的佛光
小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水. 小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X ...
- 计蒜客NOIP模拟赛(3)D1T3 任性的国王
X 国的地图可以被看作一个两行 nn 列的网格状图.现在 X 国需要修建铁路,然而该国的国王非常小气,他只想保证位于某两列之间的所有城市互相可以到达就行了,在此基础上,他希望所花费的代价最小. 铁路可 ...
- 计蒜客NOIP模拟赛6 D1T1Diamond-square
Diamond-square 算法是一种能够用于生成噪声的算法,现在我们考虑这个算法的一个变种. 你有一个 2^n\times 2^n2n×2n 的网格,一共有 (2^n+1)^2(2n ...
- 计蒜客NOIP模拟赛4 D2T1 鬼脚图
鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...
- 计蒜客 NOIP模拟赛(3) D1T1火山喷发
火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...
- 计蒜客NOIP模拟赛(2) D1T1邻家男孩
凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...
- 计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi
那年一个雨季,AmyZhi 在校门外弯身买参考书. 这时 SiriusRen 走过来,一言不合甩给她一道“自认为”很难的题: --------------- 给你一个数字 NN(NN 的范围是 11 ...
- 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...
- 计蒜客NOIP模拟赛4 D1T2小X的密室
小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条 ...
随机推荐
- IT & ME
第一部分:结缘计算机 填报志愿的那天晚上,老爸老妈和我一起在房间里讨论专业选择的事情.因为我性格比较内敛,家人建议我去学医.而我又对学医一点也不感冒,再加上自己高中时期一直喜欢玩游戏,于是最后就填报了 ...
- Java Collections API和泛型
Java Collections API和泛型 数据结构和算法 学会一门编程语言,你可以写出一些可以工作的代码用计算机来解决一些问题,然而想要优雅而高效的解决问题,就要学习数据结构和算法了.当然对数据 ...
- 学号:201621123032 《Java程序设计》第12周学习总结
1:本周学习总结 1.1:以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2:面向系统综合设计-图书馆管理系统或购物车 2.1: 简述如何使用流与文件改造你的系统.文件中数据的格式如何? ...
- VS2005 与虚拟机的那点事
好不容易把VS2008装上了,每次F5编译的时候,程序自动退出,意外的是VS2005也是同样的结果.好在有像我一样的好心人,愿意把解决的方法与大家共享. 经过搜索找到了答案,原来是VMwa ...
- Raid5两块硬盘掉线可以恢复数据吗_raid数据恢复案例分享
本案例中发生故障的存储类型是HP P2000,虚拟化平台为vmware exsi,共有10块硬盘组成raid5(硬盘容量为1t,其中6号盘是热备盘),由于某些故障导致阵列中两块硬盘亮黄灯掉线,硬盘无法 ...
- python性能分析--cProfile
Python标准库中提供了三种用来分析程序性能的模块,分别是cProfile, profile和hotshot,另外还有一个辅助模块stats.这些模块提供了对Python程序的确定性分析功能,同时也 ...
- php代码一样,编码不同报错
php代码一样,编码不同报错 两个php代码完全一样,但是就报错,比如说声明比如在very first,这种,可以把编码设置utf-8 无bom
- python 中 reduce 函数的使用
reduce()函数也是Python内置的一个高阶函数. reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接 ...
- Mego开发文档 - 事务
事务 事务允许以原子方式处理多个数据库操作.如果事务已提交,则所有操作都已成功应用于数据库.如果事务回滚,则没有任何操作应用于数据库. 默认行为 默认情况下,如果数据库提供程序支持事务,则单次的提交操 ...
- Docker学习笔记 - 在运行中的容器内启动新进程
docker psdoker top dc1 # 容器情况# 在运行中的容器内启动新进程docker exec [-d] [-i] [-t] 容器名 [command] [args]docker ex ...