1 /* 2 暴力:也是暴力过了,无语。无向图,两端点都要加度数和点 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <vector> 8 #include <cmath> 9 using namespace std; 10 11 typedef long long ll; 12 const int MAXN = 2e2 + 10; 13 const int INF = 0x3f3f3f3f; 14 ll a[MAXN]; 15 vector<int> G[MAXN]; 16 int degree[MAXN]; 17 18 int main(void) //hihoCoder 1179 永恒游戏 19 { 20 // freopen ("C.in", "r", stdin); 21 22 int n, m; 23 while (scanf ("%d%d", &n, &m) == 2) 24 { 25 for (int i=0; i<n; ++i) scanf ("%lld", &a[i]); 26 for (int i=0; i<n; ++i) G[i].clear (); 27 memset (degree, 0, sizeof (degree)); 28 while (m--) 29 { 30 int u, v; scanf ("%d%d", &u, &v); 31 degree[u]++; degree[v]++; 32 G[u].push_back (v); G[v].push_back (u); 33 } 34 35 bool ok = false; 36 for (int i=1; i<=100001; ++i) 37 { 38 ok = false; 39 for (int j=0; j<n; ++j) 40 { 41 if (a[j] >= degree[j]) 42 { 43 for (int k=0; k<G[j].size (); ++k) 44 { 45 a[j]--; a[G[j][k]]++; 46 } 47 ok = true; break; 48 } 49 } 50 if (!ok) {printf ("%d\n", i - 1); break;} 51 } 52 if (ok) puts ("INF"); 53 } 54 55 return 0; 56 }
时间: 2024-10-08 07:27:24