UVA 10828,uva10828

來源:互聯網
上載者:User

UVA 10828,uva10828
UVA 10828 - Back to Kernighan-Ritchie

題目連結

題意:給圖一個流程圖,有結點的流程,每次進入下一個流程機率是均等的,有q次詢問,求出每次詢問結點的執行期望

思路:高斯消元,每個結點的期望等於所有前趨結點的期望/出度的和,由於存在無限迴圈的情況,不能直接遞推,利用高斯消元去做,判斷無解的情況既為無限迴圈,注意如果一個式自xi為0,但是xn也為0,xi值應該是0,表示無法到達

代碼:

#include <cstdio>#include <cstring>#include <cmath>#include <vector>using namespace std;const int N = 105;const double eps = 1e-9;int n, d[N], inf[N];double a[N][N];vector<int> pre[N];void build() {    int u, v;    memset(d, 0, sizeof(d));    for (int i = 0; i < n; i++)pre[i].clear();    while (~scanf("%d%d", &u, &v) && u) {u--; v--; d[u]++;pre[v].push_back(u);    }    memset(a, 0, sizeof(a));    for (int i = 0; i < n; i++) {a[i][i] = 1;for (int j = 0; j < pre[i].size(); j++)    a[i][pre[i][j]] = -1.0 / d[pre[i][j]];if (i == 0) a[i][n] = 1;    }}void gauss() {    for (int i = 0; i < n; i++) {int k = i;for (;k < n; k++)    if (fabs(a[k][i]) > eps) break;if (k == n) continue;for (int j = 0; j <= n; j++) swap(a[k][j], a[i][j]);for (int j = 0; j < n; j++) {    if (i == j) continue;    if (fabs(a[k][i]) > eps) {double x = a[j][i] / a[i][i];for (int k = i; k <= n; k++)    a[j][k] -= x * a[i][k];    }}    }}void get_inf() {    memset(inf, 0, sizeof(inf));    for (int i = n - 1; i >= 0; i--) {if (fabs(a[i][i]) < eps && fabs(a[i][n]) > eps) inf[i] = 1;for (int j = i + 1; j < n; j++)    if (fabs(a[i][j]) > eps && inf[j]) inf[i] = 1;    }}int main() {    int cas = 0;    while (~scanf("%d", &n) && n) {build();gauss();get_inf();int q, node;scanf("%d", &q);printf("Case #%d:\n", ++cas);while (q--) {    scanf("%d", &node);    node--;    if (inf[node]) printf("infinity\n");    else printf("%.3lf\n", fabs(a[node][node]) < eps ? 0 : a[node][n] / a[node][node]);}    }    return 0;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.