hunnu - 11545 小明的烦恼——找路径 (最大流)

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11545

只是要求不经过相同的边,那么每次找出一条增广路T--,判断T<=0即可.

在加边的时候注意要c<=C的时候才需要加边.

邻接表:

 1 # include <cstdio>
 2 # include <cstring>
 3 # include <algorithm>
 4 # include <iostream>
 5 using namespace std;
 6
 7 int list[1020],dis[1020],gap[1020],node;
 8 int source,sink,Vs,inf = 1 << 30;
 9 int N,M,T,C;
10 struct E
11 {
12     int to,c,next;
13 }edg[100002];
14
15 void addedg(int from,int to,int value)
16 {
17     edg[node].to = to,edg[node].c = value,edg[node].next = list[from],list[from] = node++;
18     edg[node].to = from,edg[node].c = 0,edg[node].next = list[to],list[to] = node ++;
19 }
20
21 int dfs(int src,int aug)
22 {
23     if(src == sink) return aug;
24
25     int flow = 0,mid_d = Vs-1;
26     for(int j = list[src];j != -1; j = edg[j].next)
27         if(edg[j].c)
28         {
29             if(dis[src] == dis[edg[j].to]+1)
30             {
31                 int t = dfs(edg[j].to,min(aug-flow,edg[j].c));
32
33                 edg[j].c -= t;
34                 edg[j^1].c += t;
35                 flow += t;
36                 if(dis[source] >= Vs)    return flow;
37                 if(aug == flow) break;
38             }
39             mid_d = min(mid_d,dis[edg[j].to]);
40         }
41     if(!flow)
42     {
43         if(!(--gap[dis[src]]))    dis[source] = Vs;
44         dis[src] = mid_d+1;
45         ++gap[dis[src]];
46     }
47     return flow;
48 }
49
50 bool maxflow_sap(int src,int ed)
51 {
52     int ans = 0;
53     memset(gap,0,sizeof(gap));
54     memset(dis,0,sizeof(dis));
55     gap[0] = Vs = ed;
56     source = src, sink = ed;
57
58     while(dis[source] < Vs)
59     {
60         //printf("%d %d\n",T,ans);
61         if(dfs(source,inf))
62         T--;
63         if(T<=0) break;
64     }
65     if(T<=0) return true;
66     return false;
67
68 }
69
70 int main()
71 {
72     //freopen("a.txt","r",stdin);
73     while(~scanf("%d%d%d%d",&N,&M,&T,&C))
74     {
75         int i,j;
76         node = 0;
77         memset(list,-1,sizeof(list));
78         for(i = 0;i < M;i++)
79         {
80             int x,y,c;
81             scanf("%d%d%d",&x,&y,&c);
82            // printf("%d%d%d\n",x,y,c);
83             if(c<=C) addedg(x,y,c);
84         }
85         if(maxflow_sap(1,N)) printf("YES\n");
86         else printf("NO\n");
87     }
88     return 0;
89 }
时间: 2024-10-10 12:01:11

hunnu - 11545 小明的烦恼——找路径 (最大流)的相关文章

hunnu 11545小明的烦恼——找路径 (最大流)

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 37 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

hunnu--11545--小明的烦恼——找路径

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 36 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

hunnu 小明的烦恼——找字符串

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 小明的烦恼——找字符串 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit users: 108, Accepted users: 68 Problem 11544 : No special judgement Probl

hunnu11544:小明的烦恼——找字符串

Problem description   小明是个很优秀的同学,他除了特别公正外,他也很细心,当然老师肯定也知道,这不,老师又有事情找他帮忙了,老师每周都会给他一个字符串A,然后问小明"A字符串的循环移位产生的所有字符串中,字典序最小的是哪个",于是小明屁颠屁颠的一个一个比对,但是长久下来,小明实在是受不了了,所以他想请你帮帮他.同样,你帮他解决,你就会多AC一个题目. Hint: 如果A字符串为bcda,那么其所有的循环移位的新字符串有cdab,dabc,abcd,和他自己bcda

hnuun 11544 小明的烦恼——找字符串(字符串)

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 最小最大表示法: 求环形字符串的最小最大字典序: 参考:http://www.cnblogs.com/ziyi--caolu/p/3245132.html 最小表示法: 初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑: 1.  str[i+k]&g

hunnu11543:小明的烦恼——分糖果

Problem description   小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非常特别的性格,就是他们仅仅喜欢偶数.对于糖果也一样,所以小明在分糖果时也必需要保证这一点,即使每一个同学分的糖果数量不一样.都是奇怪的是,小明有时候并不可以合格的分糖果,这让他大为苦恼.害怕别的同学会不再信任他(虽然其它同学不会这么想).所以他想请你帮帮他.在每次老师把糖果给他时,就帮他推断出糖果能

擅长排列的小明 II(找规律)

擅长排列的小明 II 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1.第一个数必须是1 2.相邻两个数之差不大于2 你的任务是给出排列的种数. 输入 多组数据.每组数据中输入一个正整数n(n<=55). 输出 输出种数. 样例输入 4 样例输出 4 dp[i]=dp[i-1]+dp[i-3]+1; 题目大意:给出1-n

【贪心+堆】XMU 1584 小明的烦恼

题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能完成几个任务. 题目思路: [贪心+堆] 一开始想贪心但是没想到要加个堆,又跪了. 首先按照结束时间排序,结束时间早的肯定优先考虑. 如果当前的任务无法完成,就将当前任务和之前已经做了的任务中耗时最长的取消掉,改做当前任务 (如果当前任务就是耗时最长的则不用加当前任务,因为取消一个换另一个结果不会更差,只

小明系列问题――小明序列(LIS)

小明系列问题――小明序列 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4521 Description 大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了.可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来找去都是自己早已研究过的序列.小明想既然找不到,那就自己来发明一个新的序列问题吧!