码迷,mamicode.com
首页 > 其他好文 > 详细

aaaaa

时间:2018-10-18 00:51:58      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:aaaaa   names   can   ons   turn   ret   mod   dfs   namespace   

#include <bits/stdc++.h>
#define oo 1e9
using namespace std;

const int N = 200000 + 3;
int n, tot = 1, head[N], nex[2 * N], tov[2 * N], f[2 * N];
int src, sink, L, dep[N], ans;
bool vis[N];
queue<int>Q;

struct edge {
    
    int u, v, w;
}e[N];

bool cmp(const edge & a, const edge & b) {
    
    return a.w < b.w;
}

void Init( ) {
    
    scanf("%d",& n);
    for(int i = 1;i <= n;i ++) scanf("%d%d%d",& e[i].u, & e[i].v, & e[i].w);
    sort(e + 1, e + n + 1, cmp);
    scanf("%d%d%d",& src, & sink, & L);
}

void add(int u, int v, int fl) {
    
    tot ++; nex[tot] = head[u];
    tov[tot] = v; f[tot] = fl;
    head[u] = tot;
    tot ++; nex[tot] = head[v];
    tov[tot] = u; f[tot] = 0;
    head[v] = tot;
}

bool bfs( ) {
    
    memset(vis, 0, sizeof(vis));
    memset(dep, 0, sizeof(dep));
    dep[src] = 0; vis[src] = true; Q.push(src);
    while(! Q.empty( )) {
        int u = Q.front( ); Q.pop( );
        for(int i = head[u];i;i = nex[i]) {
            int v = tov[i];
            if(vis[v]) continue;
            if(f[i]) {
                vis[v] = true; dep[v] = dep[u] + 1;     Q.push(v);
            }
        }
    }
    return vis[sink];
}

int dfs(int u, int delta) {
    
    if(u == sink) return delta;
    int res = 0;
    for(int i = head[u];i;i = nex[i]) {
        int v = tov[i];
        if(delta && f[i] && dep[v] == dep[u] + 1) {
            int del = dfs(v, min(delta, f[i]));
            res += del; f[i] -= del;
            f[i ^ 1] += del;
        }
    }
    return res;
}

int dinic( ) {
    
    int ans = 0;
    while(bfs( )) ans += dfs(src, oo);
}

void Solve( ) {
    
    for(int i = 1;i <= n;i ++) {
        if(e[i].w < L) add(e[i].u, e[i].v, 1), add(e[i].v, e[i].u, 1);
        else break;
    }
    ans += dinic( );
    memset(head, 0, sizeof(head)); tot = 1;
    for(int i = n;i >= 1;i --) {
        if(e[i].w > L) add(e[i].u, e[i].v, 1), add(e[i].v, e[i].u, 1);
        else break;
    }
    ans += dinic( );
    printf("%d\n", ans);
}

int main( ) {
    
    Init( );
    Solve( );
}

 

#include <bits/stdc++.h>
using namespace std;

struct data {
    
    int tag1,tag2,s;
    data(int tag1 = 0,int tag2 = 0,int s = 0):
};

void update(int o) {
    
    if(! tag[2 * o][1] && ! tag[2 * o][2] && ! sum[2 * o]) {
        sum[o] = sum[2 * o + 1]; 
        tag[o][1] = tag[2 * o + 1][1]; tag[o][2] = tag[2 * o + 1][2];
        return ;
    }
    if(! tag[2 * o + 1][1] && ! tag[2 * o + 1][2] && ! sum[2 * o + 1]) {
        sum[o] = sum[2 * o]; 
        tag[o][1] = tag[2 * o][1]; tag[o][2] = tag[2 * o][2];
        return ;
    }
    tag[o][1] = tag[2 * o][1]; tag[o][2] = tag[2 * o + 1][2];
    if(tag[2 * o][2] && tag[2 * o + 1][1]) sum[o] = sum[2 * o] + sum[2 * o + 1] + 1;
    else sum[o] = sum[2 * o] + sum[2 * o + 1];
}

void modify(int o, int l, int r, int pos, int del) {
    
    if(l == r) {
        if(tag) tag[o][del] = 1;
        else {
            tag[o][1] = 0; tag[o][2] = 0; sum[o] = 0;
        }
        return ;
    }
    int mid = (l + r) >> 1;
    if(pos <= mid) modify(2 * o, l, mid, pos, del);
    else modify(2 * o + 1, mid + 1, r, pos, del);
    update(o);
}

void Init( ) {
    
    scanf("%d",& n);
    modify(1, 1, n, 1, 1);
    modify(1, 1, n, n, 2);
}

void Solve( ) {
    
    while(m --) {
        int opt;
        scanf("%d",& opt);
        if(opt == 1) {
            int pos; char x[5];
            scanf("%d%s",& pos, x);
            if(x[0] == () {
                modify(1, 1, n, pos, 1);
            }
            else if(x[0] == )) {
                modify(1, 1, n, pos, 2);
            }
            else modify(1, 1, n, pos, 0);
        }
        else {
            int l,r;
            scanf("%d%d",& l,& r);
            data ans = query(1, 1, n, l, r);
        }
    }
}

int main( ) {
    
    Init( );
    Solve( );
}

 

#include <bits/stdc++.h>
using namespace std;

const int N = 200000 + 3;
int n, tot = 1, head[N], nex[2 * N], tov[2 * N], f[2 * N];
int src, sink, L;

struct edge {
    
    int u, v, w;
}e[N];

bool cmp(const edge & a, const edge & b) {
    
    return a.w < b.w;
}

void Init( ) {
    
    scanf("%d",& n);
    for(int i = 1;i <= n;i ++) scanf("%d%d%d",& e[i].u, & e[i].v, & e[i].w);
    sort(e + 1, e + n + 1, cmp);
    scanf("%d%d%d",& src, & sink, & L);
}

void add(int u, int v, int fl) {
    
    tot ++; nex[tot] = head[u];
    tov[tot] = v; f[tot] = fl;
    head[u] = tot;
    tot ++; nex[tot] = head[v];
    tov[tot] = u; f[tot] = 0;
    head[v] = tot;
}

bool bfs( ) {
    
    memset(vis, 0, sizeof(vis));
    memset(dep, 0, sizeof(dep));
    dep[src] = 0; vis[src] = true; Q.push(src);
    while(! Q.empty( )) {
        int u = Q.front( ); Q.pop( );
        for(int i = head[u];i;i = nex[i]) {
            if(vis[v]) continue;
            if(f[i]) {
                vis[v] = true; dep[v] = dep[u] + 1;     Q.push(v);
            }
        }
    }
    return vis[sink];
}

int dfs(int u, int delta) {
    
    if(u == sink) return delta;
    int res = 0;
    for(int i = head[u];i;i = nex[i]) {
        int v = tov[i];
        if(delta && f[i] && dep[v] == dep[u] + 1) {
            int del = dfs(v, min(delta, f[i]));
            res += del; f[i] -= del;
            f[i ^ 1] += del;
        }
    }
    return res;
}

int dinic( ) {
    
    int ans = 0;
    while(bfs( )) ans += dfs(src, oo);
}

void Solve( ) {
    
    for(int i = 1;i <= n;i ++) {
        if(e[i].w < L) add(e[i].u, e[i].v, 1), add(e[i].v, e[i].u, 1);
        else break;
    }
    ans += dinic( );
    memset(head, 0, sizeof(head)); tot = 1;
    for(int i = n;i >= 1;i --) {
        if(e[i].w > L) add(e[i].u, e[i].v, 1), add(e[i].v, e[i].u, 1);
        else break;
    }
    ans += dinic( );
    printf("%d\n", ans);
}

int main( ) {
    
    Init( );
    Solve( );
}

 

aaaaa

标签:aaaaa   names   can   ons   turn   ret   mod   dfs   namespace   

原文地址:https://www.cnblogs.com/Rubenisveryhandsome/p/9520753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!