Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <list>
- using namespace std;
- int batt[210];
- double power[210];
- double ustime[210];
- list<int> Map[210];
- int main() {
- int T;
- scanf("%d", &T);
- // int s, t;
- while (T--) {
- int N, M, B, E;
- scanf("%d %d %d %d", &N, &M, &B, &E);
- for(int i = 1; i <= N; ++i) {
- scanf("%d", batt + i);
- }
- power[B] = E;
- int s, t;
- for (int i = 0; i < M; ++i) {
- scanf("%d %d", &s, &t);
- Map[s].push_back(t);
- }
- double basetime = 0;
- while (true) {
- double mintime = 9999999999;
- int flag = 1;
- for (int i = 1; i <= N; ++i) { // 这里可以通过队列仅把有功率的循环
- if (fabs(power[i] ) > 0.000001) {
- flag = 0;
- double ust = batt[i] / power[i];
- mintime = min(mintime, ust);
- }
- }
- if (flag) break;
- int temp[210] = {};
- basetime += mintime;
- // for (int i = 1; i <= N; ++i) // 这里可以通过队列仅把有功率的循环
- // if (batt[i] > 0) ustime[i] += mintime;
- for (int i = 1; i <= N; ++i) { // 这里可以通过队列仅把有功率的循环
- // if (batt[i] > 0) ustime[i] += mintime;
- if (fabs(power[i] ) > 0.000001) {
- batt[i] -= power[i] * mintime;
- if (batt[i] == 0) {
- for (int j : Map[i]) {
- temp[j] += power[i] / Map[i].size();
- }
- power[i] = 0;
- ustime[i] = basetime;
- }
- }
- }
- for (int i = 1; i <= N; ++i) {
- power[i] += temp[i];
- }
- }
- printf("%.4f", ustime[1] ? ustime[1] : -1);
- for (int i = 2; i <= N; ++i) printf(" %.4f", ustime[i] ? ustime[i] : -1);
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement