洛谷4382 八省聯考2018 劈配

2021-08-18 10:12:12 字數 2098 閱讀 2080

省選滾粗回家。

滿懷信心的day2t1網路流。乙個半小時自信過樣例。然後就回家了。

首先能很快的看出這是乙個網路流。

第一問:我們考慮匹配,按順序列舉人,再按順序列舉優先順序,每次在前乙個優先順序的殘餘網路上加邊,跑最大流,若流量是1,則說明這是他的理論可能的最高優先順序,去做下乙個人,否則繼續列舉優先順序。

第一問較簡單。。考場上寫的程式所有點的第一問都能過,然後第二問炸了。

第二問:二分他的排名,去重新建圖檢驗即可。。。

考場上不知道怎麼算的二分的複雜度會**,對於每次二分後要重新建圖,建圖時要列舉人和優先順序是n²,dinic是nm,結果就是n^4,算了算會**。。。於是我就寫了乙個貪心。。找到他所有「要求的最低優先順序的那些導師」的選擇者,找到排名最低的那個人讓他的排名高即可。。。場上我也不知道我是怎麼覺得他是對的。一出來討論一下就發現崩了:把排名上調的太小有可能因為前面的人加邊少了而無法調劑,就無法達到我們的目的。

然而貪心竟然0分。。。原來是陣列沒清空。。。心態**。

另外!每次建圖的時候要把前面的清空重新對於已經確定的優先順序重新建圖,保證了邊數較小,否則會t,60分。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ull unsigned long long

#define inf 0x3f

#define inf 0x3f3f3f3f

using

namespace

std;

inline ll read()

while (isdigit(c))

return f*num;

}const

int maxn=410;

const

int maxm=200*maxn;

struct edge

;edge e[maxm];

int head[maxn],cnt=1;

void addedge(int u,int v,int w)

int level[maxn],s,t;

queue

q;bool bfs()

}if (level[t]==-1) return

false;

return

true;

}int dfs(int x,int f)

if (f-tot) level[x]=-1;

return tot;

}int max_flow()

int a[210][210],ans[210],b[210],wt[210],ss[210],flag[210][210];

void init()

vector

cho[210][210];

void build(int x,int n,int m)

}int main()

for (int i=1;i<=n;i++)

scanf("%d",&ss[i]);

for (int i=1;i<=n;i++)

for (int i=1;i<=n;i++)

ans[i]=num;

}for (int ii=1;ii<=n;ii++)

if (num<=ss[ii])

l=mid+1,anss=mid;

else

r=mid-1;

}wt[ii]=ii-anss;

}for (int i=1;i<=n;i++)

printf("%d ",ans[i]);

putchar('\n');

for (int i=1;i<=n;i++)

printf("%d ",wt[i]);

putchar('\n');

}

return

0;}

P4382 八省聯考 2018 劈配

題面自己看吧 std對於第一問,容易想到是二分圖匹配。具體模型 對於第二問,可以列舉這個學生要前進多少名。假設當前學生 i 前進 x 名。那麼把學生 i 的可以使他不沮喪的所有志願的所有邊連上。再把前 i x 1 名學生滿足第一問中的志願的邊連上。判斷是否滿流即可。總結 動態加邊網路流。includ...

八省聯考2018 劈配

題目這題目,乍一眼看上去像乙個dp,因為這個資料範圍一般都是dp,但是考慮到轉移有後效性,所以顯然是做不了dp的。考試的時候像著怎麼設狀態沒有後效性,失敗了,就只打了乙個70分的暴力,還掛了20分。這題其實是個 網路流 匹配 真心看不出,然後我寫部落格的時候旁邊yl神犇看見了,嘲諷了我一波,我是真的...

八省聯考2018 劈配

題解 這題思路就是暴力。主要在於分析複雜度?dinic跑二分圖 msqrt n 這題好像用不到。首先這是個匹配問題顯然需要利用網路流 考慮第一問 每一次我們就暴力按照志願順序加入邊 直到二分圖匹配數 1 這個複雜度是 nm nm 的 因為一次只增廣一條邊所以每次是nm的,不過這個很明顯是跑不滿而且差...