題意:又是選課!N種課程,每種課程在不同時間可以選擇,總共有7天*12節的時間可以選擇課程,問最多可以選多少種課。
思路:建圖。X區為12*7個結點,Y區為N種課,直接求二分最大匹配即可。
代碼:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0) #define mem(a,b) memset(a,b,sizeof(a)) #define maxn 500 #define maxm 60005 using namespace std; int head[maxn]; int t_c,t_s; struct Edge { int v,w; int next; } edge[maxm]; int top=0; int add_edge(int u,int v) { edge[top].v=v; edge[top].next=head[u]; head[u]=top++; return 0; } int from[maxn],tt; bool use[maxn]; bool match(int x) { for(int i=head[x]; i!=-1; i=edge[i].next) { int v=edge[i].v; if(!use[v]) { use[v]=1; if(from[v]==-1||match(from[v])) { from[v]=x; return true; } } } return false; } int hungary() { tt=0; mem(from,-1); for(int i=1; i<=t_c; i++) { mem(use,0); if(match(i)) tt++; } return tt; } int init() { mem(head,-1); top=0; return 0; } int main() { int ttt; while(scanf(%d,&t_c)!=EOF) { init(); for(int i=1; i<=t_c; i++) { scanf(%d,&ttt); for(int j=1; j<=ttt; j++) { int a,b; scanf(%d%d,&a,&b); add_edge(i,t_c+(a-1)*12+b); } } int res=hungary(); printf(%d ,res); } return 0; }
HDU 5333 Undirected Graph LCT+
C++開發人臉性別識別教程(6)——通過SVM實現性別識別
Sicily 1422. Table Tennis
#include <iostream>&l
NYOJ 448 Ñ°ÕÒ×î´óÊý Ñ°ÕÒ×î´
HDU 2918 Tobo or not Tobo &nbs