題目描述看:這裡
這是我們遇到的第乙個要求輸出方案的問題
考慮建圖然後用最大流思想:
首先由源點向每一道試題連邊,容量為1
然後由每一種試題型別向匯點連邊,容量為需求量
最後由每一道試題向可能屬於的試題型別連邊,容量為1
然後跑最大流,如果流量等於總需求量的話即證明合法(每一條到匯點的邊流量都跑滿才能使流量等於總需求量,這時一定是合法的)
接下來考慮在合法時如何輸出方案
根據網路流的特徵,我們可以發現如果某一道試題被歸入了某乙個型別,那麼這道試題到這個型別的邊就會跑上1的流量
而如果正向邊跑上了1的流量,正向邊的容量即變為0,而反向邊的容量即成為1
所以我們僅需檢驗正向邊容量為0/反向邊容量為1任意乙個條件,即可說明這道試題歸屬到了這個試題型別中
考慮到是按試題型別輸出選擇的試題編號,所以我們檢驗反向邊更加簡單一些
#include #include #include #include #include #include #include #include using namespace std;const int inf=0x3f3f3f3f;
struct edge
edge[40005];
int head[1505];
int dis[1505];
int cur[1505];
int k,n;
int cnt=1;
int st,ed;
void init()
void add(int l,int r,int w)
bool bfs()
}return dis[ed];
}int ide(int x)
int dfs(int x,int lim)
}cur[x]=i;
}return ret;
}int dinic()
int main()
for(int i=1;i<=n;i++)
add(st,i,1);
add(i,st,0);
}int t=dinic();
if(t!=s)printf("no solution!\n");
else
printf("\n");}}
return 0;
}
網路流24題 試題庫問題
網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這道題的模型很顯然,源點向每個試卷連線一條容量為1的邊,每個試卷向對應的型別連線一條容量為一的邊,每個型別向匯點連線一條容量為需要數量的邊,跑一邊最大流即可。include inclu...
網路流24題 試題庫問題
傳送門 這個題好像比較水。每個種類向匯點連容量為所需求的數量的邊 然後每個試題向可以選的種類連容量為1的邊 再從源點向每個試題連容量為1的邊,然後dinic 過程中記錄一下轉移的目標節點,然後輸出路徑就好了 判無解不用我說了吧。include include include include incl...
網路流24題 試題庫問題
有 k k 種型別和 n role presentation n n個題目,每個題目會適應部分型別,一種型別可能需要多種題,一道題可能多種型別都需要,但一道題只能滿足一種型別,現要求出滿足出完所有型別的題目的方案 網路流擅長於解決各種有要求的匹配,顯然這道題是有條件的匹配,可以用最大流來解決。首先建...