Sightseeing tour POJ - 1637(混合欧拉回路判定)

强化学习在视觉导航中的应用 强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。 阅读详情

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. The bus should also start and end at the same junction. As in any city, the streets are either one-way or two-way, traffic rules that must be obeyed by the tour bus. Help the executive board and determine if it’s possible to construct a sightseeing tour under these constraints.
Input
On the first line of the input is a single positive integer n, telling the number of test scenarios to follow. Each scenario begins with a line containing two positive integers m and s, 1 <= m <= 200,1 <= s <= 1000 being the number of junctions and streets, respectively. The following s lines contain the streets. Each street is described with three integers, xi, yi, and di, 1 <= xi,yi <= m, 0 <= di <= 1, where xi and yi are the junctions connected by a street. If di=1, then the street is a one-way street (going from xi to yi), otherwise it’s a two-way street. You may assume that there exists a junction from where all other junctions can be reached.
Output
For each scenario, output one line containing the text “possible” or “impossible”, whether or not it’s possible to construct a sightseeing tour.
Sample Input
4
5 8
2 1 0
1 3 0
4 1 1
1 5 0
5 4 1
3 4 0
4 2 1
2 2 0
4 4
1 2 1
2 3 0
3 4 0
1 4 1
3 3
1 2 0
2 3 0
3 2 0
3 4
1 2 0
2 3 1
1 2 0
3 2 0
Sample Output
possible
impossible
impossible
possible

这题可以作为混合欧拉图判断的标准题(也算是裸题吧),混合的意思就是图中既有有向边又有无向边,这类的判定可以转化成网络流来做(实际上的原理是根据了有向图中,若要满足欧拉回路,入读必须等于出度),因为对于无想边,对走过这条边是有两种可能的(显然),而实际上,若此图可以构成欧拉回路,必然是选择了一个方向,那么假设一开始我们给定了方向(对于无向图),然后判断每个点的出度和入读情况,但是万一方向反了,入度不等于出度怎么办(实际上是经常要发生的),那么就是通过网络流来改变边的方向(逻辑上),还有一个,若一个点出度和入度差为奇数是肯定构不成回路,因为即使调整了一条边的方向,其差值仍为奇数,在排除了奇数情况,我们设一个超级源点s,把所有出度大于入读的点与其相连,边的权值为(out[i]−in[i])/2,还有一个超级汇点t,把所有如度大于出读的点与其相连,边的权值为(in[i]−out[i])/2,还有在点与点之间,只建立无向边,有向边删除,因为边的方向不能改变只对每个点的出入度的判断有贡献
大体流程就是:
1.先通过并查集判断图的连通
2.在1基础上判断每个点是否存在度数差为奇数的点
3.在2的基础上通过网络流判断

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<vector>
using namespace std;
int n,m;
struct node
{
    int to;
    int flow;//这个队列里的元素没有最小流的记录原因是,每个边容量最大只能是1,一旦s和t连通,只能就是加1
}edge[4005];
vector<int> graph[205];
int k;
void addEdge(int x,int y,int c)//建边的同时建反向边
{
    edge[k].to=y;
    edge[k].flow=c;
    graph[x].push_back(k);
    k++;
    edge[k].to=x;
    edge[k].flow=0;
    graph[y].push_back(k);
    k++;
}
int in[205],out[205];
int pre[205];
int sum;//记录出度减入读大于0的和
int findd(int x)
{
    return pre[x]==x?x:pre[x]=findd(pre[x]);
}
void init(int n)
{
    for(int i=0;i<=n+1;i++)
        graph[i].clear();
    for(int i=1;i<=n;i++)
        pre[i]=i;
    memset(in,0,sizeof(in));
    memset(out,0,sizeof(out));
    k=0;
    sum=0;
}
struct se
{
    int point;
    int index;
    int lastIndex;
}que[205],start,endd;
bool vis[205];
int head,tail;
bool work()
{
    int ans=0;
    bool sign;
    for(;;)
    {
        //cout<<1<<endl;
        sign=false;
        memset(vis,false,sizeof(vis));
        head=tail=0;
        que[tail++]=start;
        vis[0]=true;
        while(head<tail)
        {
            //cout<<2<<endl;
            se now=que[head++];
            int p=now.point;
            for(int i=0;i<graph[p].size();i++)
            {
                int v=edge[graph[p][i]].to;
                int  f=edge[graph[p][i]].flow;
                if(vis[v]||f==0)
                    continue;
                if(v==n+1)
                {
                    endd.index=graph[p][i];
                    endd.lastIndex=head-1;
                    endd.point=v;
                    sign=true;
                    break;
                }
                else
                {
                    se temp;
                    temp.index=graph[p][i];
                    temp.lastIndex=head-1;
                    temp.point=v;
                    vis[v]=true;
                    que[tail++]=temp;
                }
            }
        }
        if(sign)
        {
            ans++;
            while(endd.lastIndex!=-1)//修改边的权值
            {
                //cout<<3<<endl;
                edge[endd.index].flow--;
                if((endd.index)&1)
                    edge[endd.index-1].flow++;
                else
                    edge[endd.index+1].flow++;
                endd=que[endd.lastIndex];
            }
        }
        else
            break;
    }
    //cout<<"ans:"<<ans<<endl;
    return ans==sum;
}
int main()
{
    int t;
    int x,y,s;
    start.lastIndex=-1;
    start.point=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        init(n);
        while(m--)
        {
            scanf("%d%d%d",&x,&y,&s);
            out[x]++;
            in[y]++;
            if(!s)//只保留无向边的建图
                addEdge(x,y,1);
            int xx=findd(x);
            int yy=findd(y);
            if(xx!=yy)
                pre[xx]=yy;

        }
        int countt=0;
        for(int i=1;i<=n;i++)
            if(pre[i]==i)
            {
                countt++;
                if(countt>1)
                    break;
            }
        if(countt>1)
            printf("impossible\n");/先是并查集判断连通性
        else
        {
            bool sign=false;
            for(int i=1;i<=n;i++)
            {
                if(abs(in[i]-out[i])&1)//判断奇性
                {
                    sign=true;
                    break;
                }
                else
                {
                    if(out[i]>in[i])
                    {
                        sum+=(out[i]-in[i])>>1;
                        addEdge(0,i,(out[i]-in[i])>>1);
                    }
                    if(out[i]<in[i])
                        addEdge(i,n+1,(in[i]-out[i])>>1);
                }
            }
            if(sign)
                printf("impossible\n");
            else
                if(work())//最大流判断即可
                    printf("possible\n");
                else
                    printf("impossible\n");
        }
    }
    return 0;
}
UG\NX二次开发 获取三平面交点 //如果返回值不为0 则此三个面没交点 int three_faces_point(tag_t tagFace1, tag_t tagFace2, tag_t tagFace3, double *dou_x, double *dou_y, double *dou_z) 阅读详情

相关推荐

反激变压器反射电压详解

我以前做过隔离式的POE模块,其电路实际就是个反激式开关电源。只不过其输入电压范围比较低,为44V-57V。 电路如下图,就是个flyback。 可以看到,电路中有个钳位电路,用来抑制电压尖峰,就在初级线圈那里。 问题 抑制尖峰通常有2种电路,一种叫RCD钳位,另外一种是用TVS管+二极管钳位。 这两种实际中都有用,今天我不想讨论它们的区别,只想说明一个问题: 为什么不能只用一个二极管搞定?像继电器电路那样?不也能抑制尖峰吗? 答案自然是不行的...

weixin_42005993的博客 2万+

POJ1637.Sightseeing tour(观光旅游线)——混合图的欧拉回路

http://poj.org/problem?id=1637转自kuangbin巨巨 http://www.cnblogs.com/kuangbin/p/3537525.html一个混合图,既含无向边又含有向边 对无向边任取一个方向,将混合图变为有向图,转变为有向图后,根据有向图欧拉通路/回路的充要条件,进行判断 1.有向图是欧拉图当且仅当是强连通的且每个顶点的入度等于出度 2.有向图是半欧

fsdcyr 1076

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

POJ 1637 Sightseeing tour

Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8362   Accepted: 3530 Description The city executive board in Lund wants to construct a sigh

Lakersman的博客 418

SAP Fiori单点登录避坑指南:从SAML原理到实战,解决‘第一次登录跳转主页失败’和‘偶发进不了单点’

本文深入解析SAP Fiori单点登录(SSO)的SAML实战与疑难排查,涵盖SAML协议核心机制、SICF登录优先级控制及安全诊断工具的高级用法。针对‘首次登录跳转主页失败’和‘偶发单点登录失效’问题,提供从配置优化到生产环境稳定运行的全面解决方案,助力企业高效实现数字化转型。

weixin_29327977的博客 405

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2611

Sightseeing tour POJ - 1637(混合图欧拉回路)

题目链接:POJ-1637 题意:给出一张包含有向边与无向边的图,询问是否存在欧拉回路。 参考自:kuang bin 对于无向边,我们先随便指定一个方向,把所有边都变为有向边,那么对于有向图来说,存在欧拉回路的条件为 所有点的入度等于出度。 并且给无向边随便指定一个方向的话,是不会改变一个点的出度入度之差的奇偶性的。 那么如果对于这张新图来说,所有点的出度入度之差为偶数的话是不是才可能通过改变无向...

cy41的博客 213

BMS控制板硬件设计核心要点与工程避坑指南

电池管理系统(BMS)硬件设计是保障锂电安全与寿命的关键环节,其本质是模拟前端精度、数字控制可靠性、电源完整性及电磁兼容性四大要素的系统协同。理解AFE芯片(如BQ76920)的物理层约束、MCU与专用监控IC的异构分工逻辑,是构建高鲁棒BMS的基础;而晶振布局、I²C总线匹配、MOSFET体二极管方向、开尔文采样等细节,直接决定量产良率与EMC合规性。在电动工具、储能系统、两轮电动车等中低功耗BMS应用中,成本敏感型方案常采用STM32F0+AFE架构,此时电源滤波电容选型、复位电路ESR控制、TVS/齐

weixin_30591519的博客 260

Sightseeing tour (poj 1637 混合图的欧拉回路)

题意:求混合图是否有欧拉回路。 思路:首先是基图联通(不考虑度为0的点),然后需要借助网络流来判断。 首先给原图中的无向边随便指定一个方向(初始定向),将原图改为有向图G’,然后的任务就是改变G'中某些边得方向(当然是无向边转化来的,原 有向边不变)使其满足每个点的入度等于出度。 设d[i]为G'中(点i的出度-点i的入度)。可知,在改变G'中边的方向时,任何点的d值的奇偶性都不会变(设将边<i,j>改为<j,i>,则i的入度加1出度减1,j的入度减1出度加1,两者之差加2或减2,奇偶性不变)!而最终要

@you! 800

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 658

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)

ArcGIS JS 态势标绘教程:直箭头(Straight Arrow)。

非科班Java出身GISer的博客 706

POJ 1637 Sightseeing tour (混合图欧拉路判定)

Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 Description The city executive board in Lund wants to construct a sights...

weixin_33778778的博客 275

群无人机航迹规划-虚拟管道

图源北理工全权老师团队虚拟管道相关论文,文字为个人理解,以ppt形式分享报告。

coldmood77的博客 669

Poj 1637 Sightseeing tour (混合图的欧拉回路判定)

题意:给出一个混合图,要求判定欧拉回路是否存在,输入 x y d,如果d为0则为无向边,为1则为有向边。 关于有向图和无向图的欧拉回路可以参考我的另一篇博文 欧拉通路 欧拉回路的判定 Hdu 1878 欧拉回路 以下内容参考了:ZOJ 1992 & POJ 1637 (混合图欧拉回路) | 翅膀~ 首先应该判定图的连通性!本题所给图均是连通的,所以没有判断。 对所有的无向边随便定向

whyorwhnt的专栏 1254

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

poj1637 Sightseeing tour 混合图欧拉回路判定

  传送门 第一次做这种题, 尽管ac了但是完全不知道为什么这么做。 题目就是给一些边, 有向边与无向边混合, 问你是否存在欧拉回路。 做法是先对每个点求入度和出度, 如果一条边是无向边, 就随便指定一个方向, 然后连一条边, 权值为1。 最后统计入度出度, 如果一个点的(入度-出度)%2==1, 就说明不存在欧拉回路。 如果全都满足, 就判断每个点的入度出度的大小关系, 入度>出度,...

weixin_30412577的博客 148

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ1637 Sightseeing tour(混合图欧拉回路判定)

Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9709   Accepted: 4089 Description The city executive board in Lund wants to co

Jelly_acm的博客 543

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ-1637 Sightseeing tour(通过网络流判定混合图的欧拉回路)

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. The bus should als

yo_bc的博客 497

POJ1637 Sightseeing tour(判定混合图欧拉回路)

有向连通图存在欧拉回路的充要条件是所有点入度=出度。 首先随便给定所有无向边一个方向(不妨直接是u->v方向),记录所有点的度(记:度=入度-出度)。 这时如果有点的度不等于0,那么就不存在欧拉回路,就需要改变那些无向边的方向。 而改变一个无向边的方向,相当于边上两个端点的入度和出度都变化了1,它们的度±2。 另外,这样可以证明如果这时某个点的度为奇数那么一定不存在存在欧拉回路...

weixin_30415801的博客 75

poj1637Sightseeing tour(混合图欧拉回路)

题目请戳这里 题目大意:求混合图欧拉回路。 题目分析:最大流。竟然用网络流求混合图的欧拉回路,涨姿势了啊啊。。 其实仔细一想也是那么回事。欧拉回路是遍历所有边一次又回到起点的回路。双向图只要每个点度数为偶数即可,有向图要保证所有点入度等于出度。求路径的话,dfs即可。 混合图的话,就比较复杂。首先将有向边定向,求出所有点的入度和出度,如果某个点入度和出度之差为奇数,则一定不存在欧拉回路,因

ophunter的专栏 2032

[POJ 1637]Sightseeing tour[混合图欧拉回路]

题目链接:[POJ 1637]Sightseeing tour[混合图欧拉回路] 题意分析: 在一个有着单向边和双向边的图中,问:是否存在欧拉回路?(题目保证图连通) 解题思路: 欧拉回路的特点是:图中的所有点入度等于出度。然而这题多了个无向边。 我们可以考虑把无向边当成:能够随意变向的有向边。初始的时候,随意给无向边一个方向。 所以我们得到了一个弱化的初始判断条件:当某个点出度-入度

闲停 638

解题报告 之 POJ1637 Sightseeing tour

解题报告 之 POJ1637 Sightseeing tour 最大流 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 vis

JUST CODE 885

POJ1637 Sightseeing tour 混合图的欧拉回路+最大流

混合图的欧拉回路判断方法在黑书上面有具体提到。   这里采用的方法: 先给无向边定向,让后统计每一个点的出入度,如果有一个点的出入度只差为奇数,则该图不存在欧拉回路(有向图的欧拉回路每个点的度数都是偶数,至于出度=入度,在求最大流时我们会进行调整)。 全部判断完后,开始建图。 1:把每一条无向边建成一条容量为1的弧。 2:出入度之差不为0的点: 如果出>入 则将改点和源点相连 容量为

4323

poj 1637 Sightseeing tour(混合图欧拉回路)

混合图判断欧拉回路需要转换为网络流问题,首先把无向边当作有向边,然后对于每个点,如果存在点的入度和出度之差为奇数的话,就肯定不存在欧拉回路。对于都是偶数的情况,我们需要对于入度大于出度的点i,我们需要加一条源点到点i的边,容量为出入度差值的一半(因为只需要改变一半边的方向就可以使得点i满足入度等于出度),对于出度大于入度的边,需要加一条点i到汇点的边,容量为出入度差值的一半。然后对于原来的无向边,

ok_again的专栏 1287

POJ 1637 Sightseeing tour (混合图欧拉回路,网络最大流)

http://poj.org/problem?id=1637 Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7498   Accepted: 3123 Description The city execu

fcbruce 1182

POJ 1637 Sightseeing tour 混合图欧拉回路问题

http://poj.org/problem?id=1637 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...

xiji333的博客 253

【POJ1637】Sightseeing tour 混合图求欧拉回路存在性 网络流、

题意:多组数据,最后的0/1表示0无向1有向。 问是否存在欧拉回路。 题解:无向边给它任意定个向。 首先欧拉回路中点入度=出度。 然后发现每个无向边如果修改个方向,原来的入点的入度+1,出度-1,出点反之。 然后我们不妨对入度和出度不同的点跟源汇中之一连边,容量为入出度差一半(每改一条边差-2) 然后原来的无向边联系图中各点,容量1,最后check if(maxflow

辗转山河弋流歌 1404
上一篇: Drainage Ditches HDU - 1532 (网络流之最大流)(EdmondsKarp算法)
下一篇: Color the Ball HDU - 1199(离散化)
coldfresh
博客等级 码龄10年 107粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值