团队出游问题 网易有道

有道目前崇尚小团队开发工作,因为团队越小,工作效率越高,团队之间不可避免存在合作,为了把高内聚低耦合的思想用在工作中,略去。

分析:输入定点数,边数,顶点一和顶点二,以及所有的边,刚开始以为是,找到最短路,然后记录路径,进行统计,发现这个搜索就行,再仔细一想,有源点和汇点,这不是最大流最小割么!然后,发现不会写dinic算法,之前写过,就是一个深搜加广搜,然后就完了,但是现场这么紧张的写,是写不出来的,所以从网上直接找模板做吧。

1. 刚开始,添加源点和汇点,到输入的一对顶点,这个边上的流量设为100 + 10,其他输入的边的流量为1,然后就去交了,完全错误,错误的原因是:我自己把它当做有向图来处理的。其实是无向图,修改后过了80%,后来也没调出来,就结束了。

考试结束后仔细分析下:

1.这个图是无向图,使用最大流最小割的时候注意边上流量的设置。这个题目能用普通的枚举做法么,要是可以,应该怎么枚举。

2.题意强调任何2个团队只有一个接口人,这个描述应该包含很多性质吧,我不知道怎么做,这个性质应该怎么利用,图是无向图,没有出边和入边的概念。

3.由于去掉一个点,就是去掉一个团队,这样这个点应该有流量为1的限制,所以给每一个顶点(除去源点和汇点)后面添加一条边和一个点,这条边的流量应该为1.注意源点和汇点要单独处理。

4. 由于是无向图,给定的2个顶点,任意一个顶点作为源点或者汇点都可以,还是怎么做?这个也不知道怎么处理。

我想到的几点就上面这样,也没有地方去测试程序的正确性,如果你能找到原题,请告知!就这样吧。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <queue>
  5 #include <cmath>
  6 #include <algorithm>
  7 using namespace std;
  8
  9 const int mn=422;
 10 const int mm=10000;
 11 const double oo=999999;
 12 int node, st, sd, edge;
 13 int reach[mm], nxt[mm];
 14 double flow[mm];
 15 int adj[mn], work[mn], dis[mn], que[mn];
 16
 17 inline void init(int _node, int _st, int _sd)
 18 {
 19     node=_node, st=_st, sd=_sd;
 20     for(int i=0; i<node; i++)
 21         adj[i]=-1;
 22     edge=0;
 23 }
 24
 25 inline void addedge(int u, int v, double c1, double c2)
 26 {
 27     reach[edge]=v, flow[edge]=c1, nxt[edge]=adj[u],adj[u]=edge++;
 28     reach[edge]=u, flow[edge]=c2, nxt[edge]=adj[v],adj[v]=edge++;
 29 }
 30
 31 bool bfs()
 32 {
 33     int i,u,v,l,r=0;
 34     for(i=0; i<node; ++i)dis[i]=-1;
 35     dis[que[r++]=st]=0;
 36     for(l=0; l<r; ++l)
 37         for(i=adj[u=que[l]]; i>=0; i=nxt[i])
 38             if(flow[i]&&dis[v=reach[i]]<0)
 39             {
 40                 dis[que[r++]=v]=dis[u]+1;
 41                 if(v==sd)return 1;
 42             }
 43     return 0;
 44 }
 45
 46 double dfs(int u,double exp)
 47 {
 48     if(u==sd) return exp;
 49     double  tmp;
 50     for(int &i=work[u],v; i>=0; i=nxt[i])
 51         if(flow[i]&&dis[v=reach[i]]==dis[u]+1&&(tmp=dfs(v,min(exp,flow[i])))>0)
 52         {
 53             flow[i]-=tmp;
 54             flow[i^1]+=tmp;
 55             return tmp;
 56         }
 57     return 0;
 58 }
 59
 60 double Dinic()
 61 {
 62     double max_flow=0, flow;
 63     while(bfs())
 64     {   //cout << "asd" << endl;
 65         for(int i=0; i<node; i++)   work[i]=adj[i];
 66         while(flow=dfs(st,oo)) {
 67             //cout << flow << endl;
 68             max_flow+=flow;
 69         }
 70     }
 71     return max_flow;
 72 }
 73 //上面从网上搜索的,注意修改顶点数,边数,这里边数是2倍,注意节点的编号,从0开始。
 74 //当然,你必须知道dinic算法的逻辑才行。
 75 int main()
 76 {
 77     freopen("test.in", "r", stdin);
 78     int  n, m, k, t1, t2;
 79     scanf("%d%d%d%d",&n,&m,&t1, &t2);
 80     int s, e;
 81     int len = n;
 82     s = 0; e = n * 2 + 1;
 83     n = n * 2 + 2;
 84
 85     init(n,s,e);
 86     addedge(s, t1 + len, 150, 0);
 87     addedge(t2, e, 150, 0);
 88     for (int i = 1; i <= len; i++) {
 89         //if(i == t1 || i == t2) continue;
 90         addedge(i, i + len, 1, 1);
 91         //cout << i << " " << i + len << endl;
 92     }
 93     int x, y;
 94     for (int i = 0; i < m; i++) {
 95         scanf("%d%d", &x, &y);
 96
 97         addedge(x + len, y, 1, 1);
 98         //cout << x + len << " " << y << endl;
 99     }
100     double ans=Dinic();
101     printf("%d\n",(int)ans);
102
103     return 0;
104 }
时间: 2024-10-13 10:14:50

团队出游问题 网易有道的相关文章

腾讯、网易有道和阿里的笔试分享及自我总结

声明:本人Android移动开发岗 腾讯:考的很杂 选择题(25题不定项):考的包括: 编译原理两题, 计算机网络一两题(私网地址), C++若干, IOS开发一两题, 还有二叉树两三题,先后序遍历,求深度 jvm也有一题, 概率论一两题, JavaScript一题, 还有C语言(包括指针数组,数组指针,指针函数之类的)也挺多的 更多的是看程序求输出. 大题: 1,10亿QQ号用Set和Vector两个容器来删除奇数号 2,猴子摘香蕉,一次可以摘一根或两根,求摘50根有几种摘法(斐波那契数列)

【转】腾讯、网易有道和阿里的笔试分享及自我总结

声明:本人Android移动开发岗 腾讯:考的很杂 选择题(25题不定项):考的包括: 编译原理两题, 计算机网络一两题(私网地址), C++若干, IOS开发一两题, 还有二叉树两三题,先后序遍历,求深度 jvm也有一题, 概率论一两题, JavaScript一题, 还有C语言(包括指针数组,数组指针,指针函数之类的)也挺多的 更多的是看程序求输出. 大题: 1,10亿QQ号用Set和Vector两个容器来删除奇数号 2,猴子摘香蕉,一次可以摘一根或两根,求摘50根有几种摘法(斐波那契数列)

调用网易有道词典api

# -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): def __init__(self,word): self.url='http://fanyi.youdao.com/openapi.do' #url.key.keyfrom都是固定的值,所以采用这种方式赋值 self.key='929705525' self.keyfrom='pythonxiao

网易有道将为微信用户提供免费外语微信翻译服务

微信聊天时经常有些逼格高的朋友突然给你来一句英文,看了半天没明白,不回也不是.现在,微信与网易有道正式宣布达成合作,将为微信用户提供免费外语微信翻译服务.应对逼格的利器啊!(据腾讯第二季度财报信息显示,旗下的微信与WeChat合并月活跃用户已经达到了4.38亿.微信引入有道词典翻译接口,将为国际商务用户时时呈现准确翻译结果.) 打开微信聊天界面,对于英文信息,只需手指长按消息气泡,在弹出的功能界面中点击选择“翻译”选项,就可以获得有道词典的翻译结果.翻译完成后,如果不希望继续显示翻译内容,可以再

网易有道词典下载|网易有道词典app下载

电子词典改变了传统的利用字母排序翻找纸质词典的查词方式,有效提高了查找的速度,形成了一种更加轻量化的查字典的方式,网易有道是比较早期就涉足电子词典的应用之一,整体上来看词库量庞大,核心功能完整,很好地帮助用户高效地理解外语,但是在适应场景上还有很大的提升空间.网易有道词典下载链接网易有道词典是由网易有道推出的一款搜索引擎的各种语言翻译软件.支持中文.英语.日语.韩语.法语.德语.西班牙语.葡萄牙语.俄语.藏语等多语种翻译.在线翻译.离线翻译.拍照翻译.语音翻译更顺畅.权威词典:完整收录<朗文当代

网易有道笔试总结

第一题是给你一堆坐标,找出里面可以组成矩形的点并且计算面积?忘记了,当时题目扫了一眼就直接跳过了... 第二题是一个队列中元素进行一些列的操作,输出是1,2,3,4....n按顺输出,问你原来的序列是多少. 这个其实就是每次都跳过一个可用位置然后在下一个位置放入数字,如果到达容器尾部,那么再从头开始搜索,知道全部位置都放了数字. 简直天杀的,这个最后我调出来超时了2分钟,结果自动交卷了 T   T码代码的速度很重要啊,还有OJ平台是真的烂,笔试的平台感觉一个比一个烂! 代码如下: #includ

网易有道2017内推编程题

没有报有道,在牛客上做的... 1.洗牌 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程. 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张.首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿 着第n+1张到第2n张(下半堆).接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的 倒数第二张牌,直到最后放下左手的第一张牌.接着把牌合并起来就可以了. 例如有6张牌,最开始牌的序列是1,2,

2012-2015网易有道笔试题总结

2015 1.选择:抽象类和接口的区别(java) 一个类可以有多个接口 只能有继承一个父类抽象类可以有构造方法,接口中不能有构造方法.抽象类中可以有普通成员变量,接口中没有普通成员变量接口里边全部方法都必须是abstract的 抽象类的可以有实现了的方法抽象类中的抽象方法的访问类型可以是public,protected 但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型抽象类中可以包含静态方法,接口中不能包含静态方法抽象类和接口中都可以包含静态成员变量,

网易有道投放效果怎么样?投放应该找谁?

有道推行其实就这么简略! 什么是有道推行? 是有道公司供给的一种收费推行效劳,包含有道易投和有道智选两个推行产品,可以精准地将客户的产品或效劳向客户的方针顾客进行宣扬,从而影响他们的购买行为,使客户从中获益 1.客户掩盖面广 企业用户:主要用企业.白领.管理层用户,安稳经济能力,高学历 浏览型用户:巨大的用户和浏览量,企业免费取得海量宣扬.高低端人群并存. 互联网深度用户,高学历,高购买力,高传达力 自动找寻型用户:设好关键词,等候客户自动找上门 浏览型用户:巨大的用户和浏览量,低端为主各阶层网