Even Degrees

Even Degrees



给定一个无向图,构造一个有向图使得每个点的出度为偶数.



对这个图生成的树,从叶子结点往上分配,如果该节点的出度为偶数了那么指向根的边当做根的出度,如果是奇数那么指向根的那条边当作该节点的出度.
在子节点满足条件后,判断根结点指向的那个结点是否遍历过如果遍历过那么说明子节点已经满足了,这时这条边当作根的出度.


#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
template<typename T>int o(T x){cout<<x<<endl;return 0;}
int n,m;
vector<int>g[N];
vector<int>du(N,0);
vector<int>depth(N,-1);
vector<pair<int,int> >p;
int main(){
        cin>>n>>m;
        for(int i=1;i<=m;i++){
                int u,v;
                scanf("%d%d",&u,&v);
                g[u].push_back(v);
                g[v].push_back(u);
        }
        if(m&1)return o(-1);
        function<void(int u,int fa)>dfs=[&](int u,int fa){
                depth[u]=depth[fa]+1;
                for(int v:g[u]){
                        if(depth[v]==-1){
                                dfs(v,u);
                        }else{
                                if(depth[v]>depth[u]){
                                        p.emplace_back(u,v);
                                        du[u]++;
                                }
                        }
                }
                if(fa==0)return;
                if(du[u]&1){
                        p.emplace_back(u,fa);
                        du[u]++;
                }else{
                        p.emplace_back(fa,u);
                        du[fa]++;
                }
        };
        depth[0]=0;
        dfs(1,0);
        for(auto x:p)cout<<x.first<<" "<<x.second<<endl;
}
全部评论

相关推荐

09-16 14:33
已编辑
南京大学 Java
最近福耀科技大学好火啊,号称保底25w年薪就业,有不少高分学生都报了,兄弟们你有这个分,报传统92还是它?
ITTM:如果真的像宣传所说的能给到25w保底薪资,985也没啥吸引力了,这年头,读书不就是为了能多赚点钱嘛
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-08 18:20
职场水母:这题思路是什么,我目前想的一个暴力方法就是先把这个链表遍历一遍,用哈希表存储出现次数,然后再根据哈希表来一个一个删除节点,
点赞 评论 收藏
分享
xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务