hdu 3832 Earth Hour(斯坦納樹)

2021-06-27 12:36:58 字數 1128 閱讀 6272

題意:校園平面內有一些燈,在(x,y)的點能照亮半徑為r的圓的面積。兩個圓有一部分重合或者邊相切認為這兩個圓相連。問刪去一些圓是否圓1 2 3是否能直接或間接的聯通。若可以則輸出最大能刪去的圓的數目,不行則輸出-1.

原來這種神奇的東西叫做斯坦納樹。。當然最後是最短路寫出來的,分別以1 2 3為源點spfa。然後求得d1【】, d2【】, d3【】。則ans = n-min(d1【】 + d2【】+d3【】)。

可能會有疑問,比如1 2 3 連線的邊會有重複。不用考慮重複的部分,因為如果最小的情況存在重複的部分,那麼一定會有更小的情況。

#include#include#include#includeusing namespace std;

const int n = 205;

const int inf = 1 << 28;

int a[n][n];

int dis[n];

int vis[n];

int d1[n], d2[n], d3[n];

int n;

struct nodep[n];

int f(node a, node b)

void init() }}

void spfa(int st)

}} }

}int main()

} spfa(1);

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

d1[i] = dis[i];

spfa(2);

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

d2[i] = dis[i];

spfa(3);

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

d3[i] = dis[i];

int ans = inf;

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

ans = min(ans, d1[i] + d2[i] + d3[i]);

if( ans == inf )

printf("-1\n");

else

printf("%d\n", n - ans - 1);

} return 0;

}

hdu5072 莫比烏斯

給出n個數,問其中有多少三元組 a,b,c 使得 a,b b,c a,c 1 or a,b 1 and a,c 1 and b,c 1 n 10 5,ai 10 5.首先可以把問題抽象為有n個點,兩兩連邊,有紅邊和藍邊,問三邊同色三角形有多少。然後考慮算反面,發現只要找從乙個點出發的兩種邊分別有幾條...

斯特林數 HDU 3625

斯特林數第一類 n個元素的集合分成k個環排列的方法 s n 0 0 s 1 1 1 s n k s n 1 k 1 n 1 s n 1 k 當放入第n個元素,n可以為單獨的迴圈排列,當n 1個元素已經佔據了k個環排列,n可以插入n 1個元素的左邊 該題要去除1號門的單獨排列,所以。include i...

hdu 5468 莫比烏斯 搜尋

hdu 5468 puzzled elena 快速通道 sample input 5 1 21 3 2 42 5 6 2 3 4 5 sample output case 1 1 1 0 0 0 題意 在一棵樹上,每個節點有值,求以x為根節點的樹中,有多少與根節點互質 思路 用num i 記錄節點中...