题意:
      有一n个冰块,每个冰块上都有一些企鹅,所有的企鹅要跳到一个冰块上去,但是由于起跳是的后坐力原因导致每个冰块最多条mi次,最后问你所有的企鹅都跳到一个冰块上去的那块冰块可以是哪一块,输出所有肯能的终点冰块。

思路:
      比较简单,我们可以枚举终点,首先把终点拿出来,剩下的点拆点,拆成两个,限流是最多的跳跃次数,然后起点连接每个拆了的点的左侧的点,终点就是当前枚举的点,然后最大流判断下就行了,提醒下,建图的时候注意,不要多虚拟出来一些没用的点,一开始我的第一感觉就是三重的,后来在敲的时候突然感觉两重就够了,也就是最多200个点就行,还有就是当前枚举的重点的冰块上的企鹅不用动,别的没什么,因为比较简单,我就不解释太多了,不清楚的自己画画建出来的图应该很容易懂。

#include<queue>
#include<stdio.h>
#include<string.h>

#define N_node 200 + 10
#define N_edge 100000
#define INF 1000000000

using namespace std;

typedef struct
{
    int to ,cost ,next;
}STAR;

typedef struct
{
    int x ,t;
}DEP;

typedef struct
{
    double x ,y;
    int p ,c;
}NODE;

NODE node[N_node];
STAR E[N_edge];
DEP xin ,tou;
int list[N_node] ,listt[N_node] ,tot;
int deep[N_node] ,Ans[N_node];
int canlink[110][110];

void add(int a ,int b ,int c)
{
    E[++tot].to = b;
    E[tot].cost = c;
    E[tot].next = list[a];
    list[a] = tot;

E[++tot].to = a;
    E[tot].cost = 0;
    E[tot].next = list[b];
    list[b] = tot;
}

int minn(int x ,int y)
{
    return x < y ? x : y;
}

bool BFS_DEEP(int s ,int t ,int n)
{
    memset(deep ,255 ,sizeof(deep));
    xin.x = s ,xin.t = 0;
    queue<DEP>q;
    q.push(xin);
    deep[s] = 0;
    while(!q.empty())
    {
        tou = q.front();
        q.pop();
        for(int k = list[tou.x] ;k ;k = E[k].next)
        {
            xin.x = E[k].to;
            xin.t = tou.t + 1;
            if(deep[xin.x] != -1 || !E[k].cost)
            continue;
            deep[xin.x] = xin.t;
            q.push(xin);
        }
    }
    for(int i = 0 ;i <= n ;i ++)
    listt[i] = list[i];
    return deep[t] != -1;
}

int DFS_Flow(int s ,int t ,int flow)
{
    if(s == t) return flow;
    int nowflow = 0;
    for(int k = listt[s] ;k ;k = E[k].next)
    {
        listt[s] = k;
        int c = E[k].cost;
        int to = E[k].to;
        if(!c || deep[to] != deep[s] + 1)
        continue;
        int tmp = DFS_Flow(to ,t ,minn(c ,flow - nowflow));
        nowflow += tmp;
        E[k].cost -= tmp;
        E[k^1].cost += tmp;
        if(nowflow == flow) break;
    }
    if(!nowflow) deep[s] = 0;
    return nowflow;
}

int DINIC(int s ,int t ,int n)
{
    int ans = 0;
    while(BFS_DEEP(s ,t ,n))
    {
        ans += DFS_Flow(s ,t ,INF);
    }
    return ans;
}

double Get_Dis(NODE a ,NODE b)
{
    double x = (a.x - b.x) * (a.x - b.x);
    double y = (a.y - b.y) * (a.y - b.y);
    return x + y;
}

int main ()
{
    int t ,n ,i ,j ,sump;
    double dis;
    scanf("%d" ,&t);
    while(t--)
    {
        scanf("%d %lf" ,&n ,&dis);
        sump = 0;
        for(i = 1 ;i <= n ;i ++)
        {
            scanf("%lf %lf %d %d" ,&node[i].x ,&node[i].y ,&node[i].p ,&node[i].c);
            sump += node[i].p;
        }
        memset(canlink ,0 ,sizeof(canlink));
        for(i = 1 ;i <= n ;i ++)
        for(j = i + 1 ;j <= n ;j ++)
        {
            if(Get_Dis(node[i] ,node[j]) <= dis * dis)
            canlink[i][j] = canlink[j][i] = 1;
        }
        int ansid = 0;
        for(int now = 1 ;now <= n ;now ++)
        {
            memset(list ,0 ,sizeof(list));
            tot = 1;
            for(i = 1 ;i <= n ;i ++)
            {
                if(i == now) continue;
                add(0 ,i ,node[i].p);
                add(i ,i + n ,node[i].c);
            }
            for(i = 1 ;i <= n ;i ++)
            for(j = i + 1 ;j <= n ;j ++)
            {
                if(canlink[i][j])
                {
                    if(i == now) add(j + n ,now ,INF);
                    else if(j == now) add(i + n ,now ,INF);
                    else add(i + n ,j ,INF) ,add(j + n ,i ,INF);
                }
            }
            int flow = DINIC(0 ,now ,n + n);
            if(flow == sump - node[now].p)
            Ans[++ansid] = now;
        }
        if(!ansid) printf("-1\n");
        else
        {
            for(i = 1 ;i <= ansid ;i ++)
            if(i == ansid) printf("%d\n" ,Ans[i] - 1);
            else printf("%d " ,Ans[i] - 1);
        }
    }
    return 0;
}

POJ3498最大流,枚举终点,企鹅,基础最大流相关推荐

  1. Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流

    IO流:(Input Output)流 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的码表,获取对应的文字进行操作 简单说:字符流 = 字节流 + 编码表 字节流的两个顶层父 ...

  2. # Java基础——IO流

    Java基础--IO流 File类的使用(熟悉构造器和方法的使用) File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) File类的声明在java.io包下 文件和文件目录路径的抽象表示 ...

  3. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  4. java基础—IO流概述

    1 IO流--字符流 1.1引言 IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java 用于操作流的对象都在IO包中 流按操作数据分为两种,字节流与字符流, 流按流向分为:输 ...

  5. 黑马程序员-JAVA基础-IO流之字符流和字符流缓冲区

    ------- android培训.java培训.期待与您交流!------- Java 的IO 流 是实现输入和输出的基础,Java 中把不同的输入.输出源抽象表述为"流" (S ...

  6. C++基础::文件流(二)

    C++基础::文件流 .close()/.open(filename):流的打开与关闭 字符串流与文件流的交互 使用文件流的str()成员函数,将字符流中的数据转换为string类型,再使用<& ...

  7. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  8. Java基础——IO流

    IO流基础知识内容: 1.java.io包下 File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源. File file1 = new File("d:\\ ...

  9. c++ 给枚举类型设置基础类型

    C++里是枚举类型名后加个冒号再加基础类型 enum Test:byte {   a,b,c }; 当然int好,比byte/short快. 但是这样一来就可以设置自己想要的任何枚举基础类型的! (请 ...

最新文章

  1. 【一语点醒梦中人】如何优雅地合并两个JSON对象 → Object.assign(a, b)和Object.assign({}, a, b)的区别
  2. 转载:谢谢原作者: 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)
  3. oracle备份及恢复
  4. 轻轻松松为你的手机截图
  5. 看微软 Windows 30年发展简史,你用过最早的系统版本是什么?
  6. 快速排序和选择模版类
  7. 【树莓派】树莓派(Debian)- root用户无法使用SSH登录
  8. 目前最先进的目标检测能用于自动驾驶吗?这群德国人认真地做了个测评!
  9. 【24万欧】国外人工智能计算机博士自述面试经历
  10. Apache Rewrite实现URL的跳转和域名跳转
  11. matlab m语言电路仿真,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
  12. BIO,NIO,AIO总结
  13. Atitit 会话层和表示层的异同
  14. 【ZZ】ubuntu9.10桌面版使用(一)基础安装配置
  15. 为Eclipse安装ADT插件
  16. 同义词相似度可以怎样计算
  17. oracle访问emp表,通过deptno查询Emp表中雇员信息(oracle)
  18. 工业相机镜头 参数概念
  19. 面包屑导航 java_jquery 面包屑导航 具体实现
  20. Starbound服务器信息,《星界边境(starbound)》攻略心得大全 控制台命令一览

热门文章

  1. 前端怎样获取后端生成的验证码图片,并且点击图片的时候改变验证码
  2. A/B测试:概念 ≠ 执行
  3. 不要轻信!那些说月过一万的图片!
  4. CSS中z-index全解析
  5. Unity3d Http Get请求
  6. 快速学习使用 Windows Azure 上的 SharePoint Server 2013
  7. Framework7:不会Objective-C,也能开发iOS7应用
  8. 【集训队作业2018】围绕着我们的圆环
  9. [bzoj2288][pojChallenge]生日礼物【贪心+堆+链表】
  10. Swift结构体与类