【POJ】【1637】Sightseeing tour

网络流/最大流



  愚人节快乐XD

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

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

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

    连S->edge cap=1;

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

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

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

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

 1 Source Code
 2 Problem: 1637        User: sdfzyhy
 3 Memory: 1148K        Time: 32MS
 4 Language: G++        Result: Accepted
 5
 6     Source Code
 7
 8     //BZOJ 1000
 9     #include<vector>
10     #include<cstdio>
11     #include<cstdlib>
12     #include<cstring>
13     #include<iostream>
14     #include<algorithm>
15     #define rep(i,n) for(int i=0;i<n;++i)
16     #define F(i,j,n) for(int i=j;i<=n;++i)
17     #define D(i,j,n) for(int i=j;i>=n;--i)
18     using namespace std;
19
20     int getint(){
21         int v=0,sign=1; char ch=getchar();
22         while(ch<‘0‘||ch>‘9‘) {if (ch==‘-‘) sign=-1; ch=getchar();}
23         while(ch>=‘0‘&&ch<=‘9‘) {v=v*10+ch-‘0‘; ch=getchar();}
24         return v*sign;
25     }
26     typedef long long LL;
27     const int N=100010,M=100010,INF=~0u>>2;
28     /*******************tamplate********************/
29     int n,m,ans,du[1000];
30     struct edge{int to,v;};
31     struct Net{
32         edge E[M];
33         int next[M],head[N],cnt;
34         void ins(int x,int y,int z){E[++cnt]=(edge){y,z};next[cnt]=head[x];head[x]=cnt;}
35         void add(int x,int y,int z){ins(x,y,z); ins(y,x,0);}
36         int S,T,d[N],Q[M],cur[N];
37         bool mklevel(){
38             F(i,0,T) d[i]=-1;
39             int l=0,r=-1;
40             Q[++r]=S; d[S]=0;
41             while(l<=r){
42                 int x=Q[l++];
43                 for(int i=head[x];i;i=next[i])
44                     if(E[i].v && d[E[i].to]==-1){
45                         d[E[i].to]=d[x]+1;
46                         Q[++r]=E[i].to;
47                     }
48             }
49             return d[T]!=-1;
50         }
51         int dfs(int x,int a){
52             if(x==T)return a;
53             int flow=0;
54             for(int &i=cur[x];i && flow<a;i=next[i])
55                 if(E[i].v && d[E[i].to]==d[x]+1){
56                     int f=dfs(E[i].to,min(a-flow,E[i].v));
57                     E[i].v-=f;
58                     E[i^1].v+=f;
59                     flow+=f;
60                 }
61             if(!flow) d[x]=-1;
62             return flow;
63         }
64         void Dinic(){
65             while(mklevel()){
66                 F(i,S,T) cur[i]=head[i];
67                 ans+=dfs(S,INF);
68             }
69         }
70         void init(){
71             n=getint(); m=getint();
72             cnt=1; memset(head,0,sizeof head);
73             F(i,1,n) du[i]=0;
74             S=0; T=n+m+2; ans=0;
75             int x,y,z;
76             F(i,1,m){
77                 x=getint(); y=getint(); z=getint();
78                 add(S,i,1); add(i,y+m,1);
79                 if (!z) add(i,x+m,1);
80                 du[x]++; du[y]++;
81             }
82             F(i,1,n){
83                 if (du[i]%2){puts("impossible");return;}
84                 add(i+m,T,du[i]/2);
85             }
86             Dinic();
87             if (ans==m) puts("possible");
88             else puts("impossible");
89         }
90     }G1;
91     int main(){
92     #ifndef ONLINE_JUDGE
93         freopen("input.txt","r",stdin);
94     //    freopen("output.txt","w",stdout);
95     #endif
96         int T=getint();
97         while(T--) G1.init();
98         return 0;
99     }

时间: 2024-10-29 19:08:55

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

最小树形图 【poj 3164 Command Network】

定义:在有向图上的最小生成树. 算法过程:和最小生成树一样,不过这个不是无向图的,但是也可以用类似的算法,最小树形图的第一个算法数朱刘算法,依据最小生成树数算法形成的. 我们知道,在最小生成树算法中,我们每次选长度最短的边,如果满足条件则加入最小生成树中,知道所有的点都在树中,最小树形图同样. 首先和最小生成树一样,首先必须保证图联通,否则不能形成最小树形图. 但是由于是有向的,而我们只要找所有点的入边中最小的入边的和就是这个图的最小树形图,但是最关键的地方在于可能形成环,我们要做的就是缩点,把

【POJ 1459 power network】

不可以理解的是,测评站上的0ms是怎么搞出来的. 这一题在建立超级源点和超级汇点后就变得温和可爱了.其实它本身就温和可爱.对比了能够找到的题解: (1)艾德蒙·卡普算法(2)迪尼克算法(3)改进版艾德蒙·卡普算法(MY METHOD) 不去管那个0ms的吧,那么(3)号算法最为美妙[它的别名是:ISAP],时间客观. 这个就算是一个ISAP的模板吧(除了输入的难看的几行外,其余均是标准的大米饼牌模板!) 1 #include<stdio.h> 2 #include<algorithm&g

【POJ 2823 Sliding Window】 单调队列

题目大意:给n个数,一个长度为k(k<n)的闭区间从0滑动到n,求滑动中区间的最大值序列和最小值序列. 最大值和最小值是类似的,在此以最大值为例分析. 数据结构要求:能保存最多k个元素,快速取得最大值,更新时删去“过期”元素和“不再有希望”的元素,安放新元素. 单调队列的基本概念百度百科讲得比较清楚了:http://baike.baidu.com/view/3771451.htm 我的大致思路是: 1. 每个元素存储为结构体,包含它的秩和值.维护最大长度为k的单调队列,保证所有元素的秩都在区间内

【POJ 3669 Meteor Shower】简单BFS

流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封锁).安全地带为永远不会被封锁的点. 简单bfs,开始WA在把平面空间上限当成300*300,但根据题目,这只是有流星雨撞击的范围.实际可走的空间理论上没上限,但分析可得,离原点最近的安全地带一定在(302,302)范围内,所以应可把数组至少开为303*303. 后来WA在把G[0][0]==1的情

【 POJ - 1204 Word Puzzles】(Trie+爆搜)

Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special Judge Description Word puzzles are usually simple and very entertaining for all ages. They are so entertaining that Pizza-Hut company started using t

kuangbin专题四 最短路练习【从入门到熟练】

[POJ 2253 Frogger] 这道题求从u到v中所有通路的最大边最小 我直接二分做了,但实际上这种题是最短路算法的变种,意义在于告诉我们spfa这些算法不仅能维护出最短路,稍加修改后可以维护出很多其他东西. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<string> #include

【POJ】1739 Tony&#39;s Tour

http://poj.org/problem?id=1739 题意:n×m的棋盘,'#'是障碍,'.'是空白,求左下角走到右下角且走过所有空白格子的方案数.(n,m<=8) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; #define BIT(a,b) ((a)<<((b)<<1)) #

【POJ 1739】Tony&#39;s Tour

Tony's Tour Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3545   Accepted: 1653 Description A square township has been divided up into n*m(n rows and m columns) square plots (1<=N,M<=8),some of them are blocked, others are unblocked.

【POJ】【1739】Tony&#39;s Tour

插头DP 楼教主男人八题之一! 要求从左下角走到右下角的哈密顿路径数量. 啊嘞,我只会求哈密顿回路啊……这可怎么搞…… 容易想到:要是把起点和重点直接连上就变成一条回路了……那么我们就连一下~ 我们可以在整张图下面加两行:(例:3*5) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 红色的是原来的起点和终点,下面紫色的路径将这两个点连了起来= =然后这题瞬间就变回了Formula 1那题……求哈密顿回路数量,so easy有没有~(其实不这样

【POJ1637】Sightseeing tour

Description The city executive board in Lund wants to construct a sightseeing tour by bus in Lund, so that tourists can see every corner of the beautiful city. They want to construct the tour so that every street in the city is visited exactly once.