從源到每乙個人連一條容量為 \(1\) 的邊。
從每乙個導師到匯連一條容量為導師戰隊人數的邊。
第一問我們依次列舉每乙個學員,然後再依次與第 \(1\)至 \(m\) 志願的老師連邊,如果與第 \(i\) 志願的導師連邊跑最大流使得最大流改變,說明找到了乙個導師與自己對應。自己的最小的能實現的志願就是 \(i\) 。如果找不到志願i的導師要把與志願i的導師連的邊刪掉。不刪聽說會t,一開始以為要推流,結果並不用。。。
第二問,我們可以二分需要高多少名。然後跟第一問做一樣的操作就行。但是我們需要知道處理完前 \(i\) 個學員的圖是什麼樣子的。
所以要用可持久化網路流??
因為資料範圍很小,我們可以直接把處理完第i個學員後的圖暴力存下。。。
然後這道題就解決了?
還有**要寫
#include#include#include#include#include#include#includeusing namespace std;
const int inf=1e9;
const int n=205;
struct edgee[n*2+n*n*2],hise[n][n*2+n*n*2];
int cnt,head[n*2],hiscnt[n],hishead[n][n*2];
void add_edge(int u,int v,int flow)
int dis[n*2];
bool bfs(int s,int t)
} }if(dis[t]==-1)return false;
return true;
}int dfs(int u,int t,int f)
} }if(used==0)dis[u]=-1;
return used;
}int ans,hisans[n];
void dinic(int s,int t)
int s,t;
void copy(int now)
vectorvec[n][n];
int s[n];
int n,m;
bool judge(int now,int pre)
while(ch>='0'&&ch<='9')
return sum*f;
}int tmp[n];
int main()
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)s[i]=read();
copy(0);
for(int i=1;i<=n;i++)
}if(tmp[i]==0)copy(i),tmp[i]=m+1;
} for(int i=1;i<=n;i++)printf("%d ",tmp[i]);
printf("\n");
for(int i=1;i<=n;i++)
int l=1,r=i-1;
int ans=i;
while(l<=r)
printf("%d ",ans);
} printf("\n");
} return 0;
}
八省聯考2018 劈配
題目這題目,乍一眼看上去像乙個dp,因為這個資料範圍一般都是dp,但是考慮到轉移有後效性,所以顯然是做不了dp的。考試的時候像著怎麼設狀態沒有後效性,失敗了,就只打了乙個70分的暴力,還掛了20分。這題其實是個 網路流 匹配 真心看不出,然後我寫部落格的時候旁邊yl神犇看見了,嘲諷了我一波,我是真的...
八省聯考2018 劈配
題解 這題思路就是暴力。主要在於分析複雜度?dinic跑二分圖 msqrt n 這題好像用不到。首先這是個匹配問題顯然需要利用網路流 考慮第一問 每一次我們就暴力按照志願順序加入邊 直到二分圖匹配數 1 這個複雜度是 nm nm 的 因為一次只增廣一條邊所以每次是nm的,不過這個很明顯是跑不滿而且差...
八省聯考2018 劈配
一年一度的綜藝節目 中國新 又開始了。zayid 從小就夢想成為一名程式設計師,他覺得這是乙個展示自己的舞台,於是他毫不猶豫地報名了。輕車熟路的zayid 順利地通過了海選,接下來的環節是導師盲選,這一階段的規則是這樣的 總共n 名參賽選手 編號從1 至n 每人寫出乙份 並介紹自己的夢想。接著 由所...