日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ3762 时间段用k次

發(fā)布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ3762 时间段用k次 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 有n個任務(wù),每個任務(wù)有自己的開始時間和結(jié)束時間,還有完成這個任務(wù)能獲得的價值,然后每一天的同一個時刻只能執(zhí)行一個任務(wù),每個任務(wù)必須連續(xù)執(zhí)行完成,最多可以工作m天,問這m天能獲得的最大價值。


思路:
? ? ? 一開始沒想太多,直接建立一個圖,然后TLE了,先說下我TLE的那個吧!,邏輯上應(yīng)該沒錯,是時間過不起,我是先把每一個點差點,拆成兩個,流量1,費用是他的價值,然后虛擬出來一個點,連接所有點,流量是1,意思是所有點都可以作為這一天的開始,然后每一個點都連接干完這個活之后可以在干的另一個活,流量是1,費用0,最后所有的點在連接終點,流量1,費用0,意思是每一個點都可以作為這一天的最后一個任務(wù),然后在超級源點那在虛擬出來一個點,和起點連接,流量m費用0,意思最多可以干m天,結(jié)果TLE了,現(xiàn)在說下官方題解,官方題解也非常簡單容易理解,是這樣的,我們可以吧所有涉及的時間點都拿出來,然后sort離散化一下,然后得到一個<=n*2的點集,(<是因為可能有重復(fù)的時間點),把這一串點集全都連接上,i->i+1 流量是INF,費用是0,這樣的目的是任意兩個任務(wù)之間雖然沒有交集,但是也可以用0花費連接起來,然后對于每一個任務(wù),他的起點和終點都對應(yīng)著離散化之后的某兩個點,然后把這兩個點之間倆接一條邊,流量1,費用是這個任務(wù)的價值,最后再在第一個點之前虛擬出來一個點s連接第一個點,流量是m費用是0,限制天數(shù)用的,然后在在最后一個離散化后的點連接一個虛擬的t(這個虛擬的t可以不用,我個人習(xí)慣,于是就用了),最后一遍費用流就行了。官方的這個做法的邊數(shù)是n的,我的那個是n*n的,n的這個我的都跑了1300多了,n*n的必然TLE了。


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


#define N_node 5000
#define N_edge 50000
#define INF 1000000000


using namespace std;


typedef struct
{
? ?int from ,to ,next ,cost ,flow;
}STAR;


typedef struct
{
? ?int a ,b ,c;
}NODE;


STAR E[N_edge];
NODE node[2200];
int list[N_node] ,tot;
int mer[N_node] ,s_x[N_node] ,mark[N_node];
int num[N_node];
map<int ,int>hash;




void add(int a ,int b ,int c ,int d)
{
? ?E[++tot].from = a;
? ?E[tot].to = b;
? ?E[tot].cost = c;
? ?E[tot].flow = d;
? ?E[tot].next = list[a];
? ?list[a] = tot;
? ?
? ?E[++tot].from = b;
? ?E[tot].to = a;
? ?E[tot].cost = -c;
? ?E[tot].flow = 0;
? ?E[tot].next = list[b];
? ?list[b] = tot;
}


bool Spfa(int s ,int t ,int n)
{
? ?for(int i = 0 ;i <= n ;i ++)
? ?s_x[i] = -INF ,mark[i] = 0;
? ?queue<int>q;
? ?s_x[s] = 0 ,mark[s] = 1;
? ?q.push(s);
? ?memset(mer ,255 ,sizeof(mer));
? ?while(!q.empty())
? ?{
? ? ? int xin ,tou;
? ? ? tou = q.front();
? ? ? q.pop();
? ? ? mark[tou] = 0;
? ? ? for(int k = list[tou] ;k ;k = E[k].next)
? ? ? {
? ? ? ? ?xin = E[k].to;
? ? ? ? ?if(s_x[xin] < s_x[tou] + E[k].cost && E[k].flow)
? ? ? ? ?{
? ? ? ? ? ? s_x[xin] = s_x[tou] + E[k].cost;
? ? ? ? ? ? mer[xin] = k;
? ? ? ? ? ? if(!mark[xin])
? ? ? ? ? ? {
? ? ? ? ? ? ? ?mark[xin] = 1;
? ? ? ? ? ? ? ?q.push(xin);
? ? ? ? ? ? }
? ? ? ? ?}
? ? ? }
? ?}
? ?return mer[t] != -1;
}


int M_C_Flow(int s ,int t ,int n)
{
? ?int minflow ,maxflow = 0 ,maxcost = 0;
? ?while(Spfa(s ,t ,n))
? ?{
? ? ? minflow = INF;
? ? ? for(int i = mer[t] ;i + 1 ;i = mer[E[i].from])
? ? ? if(minflow > E[i].flow) minflow = E[i].flow;
? ? ? for(int i = mer[t] ;i + 1 ;i = mer[E[i].from])
? ? ? {
? ? ? ? ?E[i].flow -= minflow;
? ? ? ? ?E[i^1].flow += minflow;
? ? ? ? ?maxcost += minflow * E[i].cost;
? ? ? }
? ? ? maxflow += minflow;
? ?}
? ?return maxcost;
}


int main ()
{
? ?int i ,j ,n ,m;
? ?int a ,b ,c ,aa ,bb ,cc ,d;
? ?while(~scanf("%d %d" ,&n ,&m))
? ?{
? ? ? memset(list ,0 ,sizeof(list)) ,tot = 1;
? ? ? int nowid = 0;
? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?scanf("%d:%d:%d %d:%d:%d %d" ,&a ,&b ,&c ,&aa ,&bb ,&cc ,&d);
? ? ? ? ?node[i].a = c*1+b*60+a*3600;
? ? ? ? ?node[i].b = cc*1+bb*60+aa*3600;
? ? ? ? ?node[i].c = d;
? ? ? ? ?num[++nowid] = node[i].a;
? ? ? ? ?num[++nowid] = node[i].b;
? ? ? }
? ? ? sort(num + 1 ,num + nowid + 1);
? ? ? int now = 0;
? ? ? for(i = 1 ;i <= nowid ;i ++)
? ? ? {
? ? ? ? ?if(i == 1 || num[i] != num[i-1]) now ++;
? ? ? ? ?hash[num[i]] = now;
? ? ? }
? ? ? memset(list ,0 ,sizeof(list)) ,tot = 1;
? ? ? add(0 ,1 ,0 ,m);
? ? ? for(i = 2 ;i <= now ;i ++)
? ? ? add(i - 1 ,i ,0 ,INF);
? ? ? add(now ,now + 1 ,0 ,m);
? ? ? for(int i = 1 ;i <= n ;i ++)
? ? ? add(hash[node[i].a] ,hash[node[i].b] ,node[i].c ,1);
? ? ? int Ans = M_C_Flow(0 ,now + 1 ,now + 1);
? ? ? printf("%d\n" ,Ans);
? ?}
? ?return 0;
}
? ? ? ? ?
? ? ? ??
? ? ??
? ? ??
? ? ? ? ?
? ? ??
? ? ??
? ? ??
? ?
?
? ?
? ?
? ?




? ?







總結(jié)

以上是生活随笔為你收集整理的POJ3762 时间段用k次的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲伦理天堂 | 性歌舞团一区二区三区视频 | 日本在线中文字幕专区 | 草草网址 | 久久精品国产熟女亚洲AV麻豆 | 日日操日日干 | 国产精品欧美性爱 | 少妇婷婷 | 熟女俱乐部一区二区 | 天天色天天射综合网 | 韩国成人理伦片免费播放 | 在线黄网 | 黄色av免费在线播放 | 日韩最新视频 | 光棍影院av| 日本亚洲色大成网站www久久 | 久久久在线免费观看 | 亚洲精品自拍 | 国产乱free国语对白 | 色婷婷18| 女生被男生c| ass日本粉嫩pics珍品 | 亚洲国产婷婷香蕉久久久久久99 | 天堂视频中文在线 | 欧美精品五区 | 国产 福利 在线 | 国产在线观看a | 日本中文字幕免费观看 | 玖草在线观看 | 综合色视频 | 国产乱了高清露脸对白 | 天天天天天天操 | 尤物网址在线观看 | 欧美精品videosex极品 | 日韩激情在线视频 | 国产剧情av在线 | 中国女人内谢69xxxx免费视频 | 久久久久99精品成人片试看 | 成人在线高清视频 | 综合av第一页 | 精品久久一区二区三区 | 男生和女生一起搞鸡 | 国产91九色 | 波多野结衣91 | 白白色视频在线 | 在线观看涩涩视频 | 男人的天堂aa | 少妇天堂网 | 日本无遮羞调教打屁股网站 | 最新中文字幕在线播放 | h视频免费在线 | 中文字幕无码av波多野吉衣 | 国产av国片偷人妻麻豆 | 狠狠干2024 | 亚洲精品在线视频免费观看 | a级一片 | 国产伦精品一区二区三区视频免费 | 国产真实乱人偷精品视频 | 一区二区三区免费 | 夜夜夜夜操 | 亚洲性生活网站 | 少妇第一次交换又紧又爽 | 欧美性生话 | 毛片av在线播放 | 久久精品人妻一区二区三区 | www中文字幕在线观看 | 毛片9| 成人av在线影院 | 91欧美精品 | 四季av日韩精品一区 | 欧美成人黑人猛交 | 人人入人人 | 黄色成年人 | 精品欧美一区二区精品少妇 | 欧美另类人妖 | 欧美区国产区 | 国产女主播一区二区三区 | 亚洲综合狠狠 | 国产精品成人久久久久 | 久久综合99 | 黄色短视频在线观看 | 欧美天天色 | 中文在线a在线 | h视频在线免费看 | 欧美激情视频在线播放 | 欧美成人视 | 久草在在线视频 | 九九在线观看视频 | wwwxxx色| 天天看天天干 | 中文字幕在线视频免费观看 | 一极黄色大片 | 大奶一区| 91天堂网 | 激情开心站 | 91天天| 国产精品国产三级国产普通话蜜臀 | 91丨porny丨中文 | 国产精品一区二区三区四区视频 |