コード例 #1
0
ファイル: Source.cpp プロジェクト: lonelam/SolveSet
int main()
{
	while (scanf("%d", &n) != EOF)
	{
		gg.init(n + 3);
		int supernode = n;
		int source = n + 1;
		int dest = source + 1;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				scanf("%d", C[i] + j);
				if (i != j)
				{
					gg.add(i, j, 1, C[i][j]);
				}
			}
		}
		for (int i = 1; i < n; i++)
		{
			gg.add(i, supernode, 1, C[i][0]);
			gg.add(supernode, i - 1, 1, C[n - 1][i - 1]);
		}
		gg.add(source, 0, 1, 0);
		gg.add(n - 1, dest, 1, 0);
		printf("%d\n",gg.MF(source, dest));

	}
}
コード例 #2
0
ファイル: poj2195.cpp プロジェクト: lonelam/SolveSet
int main()
{
    int n, m;
    ios::sync_with_stdio(false);
    while(cin >> n >> m)
    {
        MCMF MF;
        if (n == 0 && m == 0)
        {
            break;
        }
        int S = n * m + 1;
        int T = S + 1;
        int tot = T + 1;
        MF.init(tot);
        for (int i = 0; i < n; i++)
        {
            cin >> grid[i];
            for(int j = 0; j < m; j++)
            {
                if (grid[i][j] == 'm')
                {
                    MF.add(S, i * m + j + 1, 1, 0);
        //            cout <<"m ";
                }
                else if (grid[i][j] == 'H')
                {
                    MF.add(i * m + j+1, T, 1, 0);
                //    cout <<"eiwgo";
                }
                for (int d = 0; d < 4; d++)
                {
                    int tx = i + dx[d];
                    int ty = j + dy[d];
                    if (tx >= 0 && tx < n && ty >= 0 && ty < m)
                    {
                        MF.add(i * m + j+1, tx * m + ty+1, inf,1);
                        //cout <<"addege";
                    }
                }
            }
        }
        cout << MF.mincost(S, T) << endl;
    }
}