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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POJ 1486 Sorting Slides(二分图完全匹配必须边)题解

發布時間:2025/3/15 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1486 Sorting Slides(二分图完全匹配必须边)题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給你n張照片的范圍,n個點的坐標,問你能唯一確定那幾個點屬于那幾張照片,例如樣例中4唯一屬于A,2唯一屬于C,1唯一屬于B,3唯一屬于C

思路:進行二分圖完全匹配,怎么判斷唯一屬于?匹配完之后刪掉某一條匹配邊再跑一次二分圖匹配,如果還能完全匹配,那么就不是唯一,反之唯一。

代碼:

#include<set> #include<map> #include<stack> #include<cmath> #include<queue> #include<vector> #include<string> #include<cstdio> #include<cstring> #include<sstream> #include<iostream> #include<algorithm> typedef long long ll; using namespace std; const int maxn = 100 + 10; const int MOD = 1e9 + 7; const int INF = 0x3f3f3f3f; struct node{int x1, x2, y1, y2; }p[maxn]; struct Node{int x, y; }a[maxn]; struct Edge{int to, next; }edge[maxn * 4]; int g[maxn][maxn], linker[maxn], ans[maxn], n; bool used[maxn]; bool dfs(int u){for(int v = 0; v < 2 * n; v++){if(g[u][v] && !used[v]){used[v] = true;if(linker[v]== -1 || dfs(linker[v])){linker[v] = u;return true;}}}return false; } int hungary(){int res = 0;memset(linker, -1, sizeof(linker));for(int u = 0; u < 2 * n; u++){memset(used, false, sizeof(used));if(dfs(u)) res++;}return res; } bool inside(node m, Node n){if(n.x > m.x1 && n.x < m.x2 && n.y > m.y1 && n.y < m.y2) return true;return false; } int main(){int ca = 1;while(~scanf("%d", &n) && n){for(int i = 0; i < n; i++){scanf("%d%d%d%d", &p[i].x1, &p[i].x2, &p[i].y1, &p[i].y2);}memset(g, 0, sizeof(g));for(int i = 0; i < n; i++){scanf("%d%d", &a[i].x, &a[i].y);for(int j = 0; j < n; j++){if(inside(p[j], a[i])){g[i][n + j] = g[n + j][i] = 1;}}}printf("Heap %d\n", ca++);int ret = hungary();memcpy(ans, linker, sizeof(ans));if(ret != 2 * n) printf("none\n");else{bool ok = false;for(int i = n; i < 2 * n; i++){g[i][ans[i]] = g[ans[i]][i] = 0;ret = hungary();if(ret == 2 * n) continue;printf("%s(%c,%d)", ok == true? " " : "",'A' + (i - n), ans[i] + 1);ok = true;g[i][ans[i]] = g[ans[i]][i] = 1;}if(!ok) printf("none\n");else printf("\n");}printf("\n");}return 0; }

?

轉載于:https://www.cnblogs.com/KirinSB/p/10453542.html

總結

以上是生活随笔為你收集整理的POJ 1486 Sorting Slides(二分图完全匹配必须边)题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。