【POJ】【1637】Sightseeing tour

时间:2021-10-25 04:15:05

网络流/最大流


  愚人节快乐XD

  这题是给一个混合图(既有有向边又有无向边),让你判断是否有欧拉回路……

  我们知道如果一个【连通】图中每个节点都满足【入度=出度】那么就一定有欧拉回路……

  那么每条边都可以贡献一个出度出来,对于一条边u->v:

    连S->edge cap=1;

    如果是有向边,就连 edge->v cap=1;

    否则(无向边)连edge->u cap=1, edge->v cap=1;

  然后每个点的总度数我们是知道的……那么它最后的【出度】就等于 总度数/2。(这个地方我傻逼了没想到……

  P.S.这题是跟POJ2699比较类似的

 Source Code
Problem: User: sdfzyhy
Memory: 1148K Time: 32MS
Language: G++ Result: Accepted Source Code //BZOJ 1000
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
typedef long long LL;
const int N=,M=,INF=~0u>>;
/*******************tamplate********************/
int n,m,ans,du[];
struct edge{int to,v;};
struct Net{
edge E[M];
int next[M],head[N],cnt;
void ins(int x,int y,int z){E[++cnt]=(edge){y,z};next[cnt]=head[x];head[x]=cnt;}
void add(int x,int y,int z){ins(x,y,z); ins(y,x,);}
int S,T,d[N],Q[M],cur[N];
bool mklevel(){
F(i,,T) d[i]=-;
int l=,r=-;
Q[++r]=S; d[S]=;
while(l<=r){
int x=Q[l++];
for(int i=head[x];i;i=next[i])
if(E[i].v && d[E[i].to]==-){
d[E[i].to]=d[x]+;
Q[++r]=E[i].to;
}
}
return d[T]!=-;
}
int dfs(int x,int a){
if(x==T)return a;
int flow=;
for(int &i=cur[x];i && flow<a;i=next[i])
if(E[i].v && d[E[i].to]==d[x]+){
int f=dfs(E[i].to,min(a-flow,E[i].v));
E[i].v-=f;
E[i^].v+=f;
flow+=f;
}
if(!flow) d[x]=-;
return flow;
}
void Dinic(){
while(mklevel()){
F(i,S,T) cur[i]=head[i];
ans+=dfs(S,INF);
}
}
void init(){
n=getint(); m=getint();
cnt=; memset(head,,sizeof head);
F(i,,n) du[i]=;
S=; T=n+m+; ans=;
int x,y,z;
F(i,,m){
x=getint(); y=getint(); z=getint();
add(S,i,); add(i,y+m,);
if (!z) add(i,x+m,);
du[x]++; du[y]++;
}
F(i,,n){
if (du[i]%){puts("impossible");return;}
add(i+m,T,du[i]/);
}
Dinic();
if (ans==m) puts("possible");
else puts("impossible");
}
}G1;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
int T=getint();
while(T--) G1.init();
return ;
}

【POJ】【1637】Sightseeing tour的更多相关文章

  1. 【 POJ - 1204 Word Puzzles】(Trie&plus;爆搜&vert;AC自动机)

    Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special ...

  2. 【POJ 1459 power network】

    不可以理解的是,测评站上的0ms是怎么搞出来的. 这一题在建立超级源点和超级汇点后就变得温和可爱了.其实它本身就温和可爱.对比了能够找到的题解: (1)艾德蒙·卡普算法(2)迪尼克算法(3)改进版艾德 ...

  3. 【POJ 2728 Desert King】

    Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 27109Accepted: 7527 Description David the ...

  4. 【POJ 2976 Dropping tests】

    Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 13849Accepted: 4851 Description In a certa ...

  5. 【POJ 3080 Blue Jeans】

    Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 19026Accepted: 8466 Description The Genogr ...

  6. 【POJ各种模板汇总】(写在逆风省选前)(不断更新中)

    1.POJ1258 水水的prim……不过poj上硬是没过,wikioi上的原题却过了 #include<cstring> #include<algorithm> #inclu ...

  7. 【POJ 3669 Meteor Shower】简单BFS

    流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...

  8. 【POJ 2823 Sliding Window】 单调队列

    题目大意:给n个数,一个长度为k(k<n)的闭区间从0滑动到n,求滑动中区间的最大值序列和最小值序列. 最大值和最小值是类似的,在此以最大值为例分析. 数据结构要求:能保存最多k个元素,快速取得 ...

  9. 【POJ 2406 Power Strings】

    Time Limit: 3000MSMemory Limit: 65536K Description Given two strings a and b we define a*b to be the ...

  10. Sightseeing tour 【混合图欧拉回路】

    题目链接:http://poj.org/problem?id=1637 Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total ...

随机推荐

  1. MongoDB学习笔记~环境搭建

    回到目录 Redis学习笔记已经告一段落,Redis仓储也已经实现了,对于key/value结构的redis我更愿意使用它来实现数据集的缓存机制,而对于结构灵活,查询效率高的时候使用redis就有点不 ...

  2. Twisted

    Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如网络协议,线程,数据库管理,网络操作,电子邮件等 事件驱动 一,注册事件 二,触发事件 自定义事件框架  event_fram.py # ...

  3. 对IEnumerable&lt&semi;T&gt&semi;和IQueryable&lt&semi;T&gt&semi;的一点见解

    今天学习了用EF模型做查询,感觉数据库上下文对象的扩展方法很强大,所以研究了一下where的实现原理,其中遇到了一个问题,就是关于IEnumerable和IQueryable的区别,所以查了查资料,这 ...

  4. docker基本概念,创建、起动实例,保存自定义镜像等常用操作

    14年docker火了一阵,当时自学整理了一份文档,后来冷落了. 现在发现很多同事还是想学习docker,但无从下手,所以重新整理了这篇分享,10分钟就可以带你彻底理解docker,并能够创建属于自己 ...

  5. &lbrack;Javascript&rsqb; Use Number&lpar;&rpar; to convert to Number if possilbe

    Use map() and Number() to convert to number if possilbe or NaN. var str = ["1","1.23& ...

  6. 关于本学期西南交通大学ACM-ICPC校集训队 训练计划(Beta 1&period;0)

    在第十周新秀杯之后,从第十一周起的训练计划如下: 1.十一周的周一至周五进行ACM校集训队申请.申请方式从2014年11月17日0:00开始,发送申请者的姓名.学号.专业.电话.QQ以及大学(针对大一 ...

  7. &lpar;3&rpar;润写一个程序&lpar;类&rpar;&comma;用户输入一段英文&comma;然后输出这段英文中所有长度为3个字母的单词井且如果单词如果有连续 复了2次&comma;只输出一个【例&colon; This isis a desk&comma;程序输出 his is a desk】&comma;&lpar;提示&comma;有re正则匹配来做&rpar;

    import re x = input('Please input a string:') pattern = re.compile(r'\b[a-zA-Z]{3}\b') print(pattern ...

  8. Android--拦截系统BroadcastReceiver

    前言 上一篇博客,讲了BroadcastReceiver的一些基础内容,如何注册以及发送一个广播,那是基础,不清楚的可以先看看:Android--BroadcastReceiver.但是在实际开发当中 ...

  9. node 的exports 和module

    文件05/** * Created by Mr.tiankong on 2017/3/24. */var People = require("./test/people.js"); ...

  10. JavaScript中的异步 macrotask 和 microtask

    看过很多setTimeout.Promise执行顺序的面试题,一直不明白为啥都是异步操作,Promise就牛×些呢?直到了解了macrotask和micromask才恍然大悟... 先来一道面试题助助 ...