青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Google code jam 2008 R1A - Milkshakes

Problem

You own a milkshake shop. There are N different flavors that you can prepare, and each flavor can be prepared "malted" or "unmalted". So, you can make 2N different types of milkshakes.

Each of your customers has a set of milkshake types that they like, and they will be satisfied if you have at least one of those types prepared. At most one of the types a customer likes will be a "malted" flavor.

You want to make N batches of milkshakes, so that:

  • There is exactly one batch for each flavor of milkshake, and it is either malted or unmalted.
  • For each customer, you make at least one milkshake type that they like.
  • The minimum possible number of batches are malted.

Find whether it is possible to satisfy all your customers given these constraints, and if it is, what milkshake types you should make.

If it is possible to satisfy all your customers, there will be only one answer which minimizes the number of malted batches.

Input

  • One line containing an integer C, the number of test cases in the input file.

For each test case, there will be:

  • One line containing the integer N, the number of milkshake flavors.
  • One line containing the integer M, the number of customers.
  • M lines, one for each customer, each containing:
    • An integer T >= 1, the number of milkshake types the customer likes, followed by
    • T pairs of integers "X Y", one for each type the customer likes, where X is the milkshake flavor between 1 and N inclusive, and Y is either 0 to indicate unmalted, or 1 to indicated malted. Note that:
      • No pair will occur more than once for a single customer.
      • Each customer will have at least one flavor that they like (T >= 1).
      • Each customer will like at most one malted flavor. (At most one pair for each customer has Y = 1).
    All of these numbers are separated by single spaces.

Output

  • C lines, one for each test case in the order they occur in the input file, each containing the string "Case #X: " where X is the number of the test case, starting from 1, followed by:
    • The string "IMPOSSIBLE", if the customers' preferences cannot be satisfied; OR
    • N space-separated integers, one for each flavor from 1 to N, which are 0 if the corresponding flavor should be prepared unmalted, and 1 if it should be malted.

Limits

Small dataset

C = 100
1 <= N <= 10
1 <= M <= 100

Large dataset

C = 5
1 <= N <= 2000
1 <= M <= 2000

The sum of all the T values for the customers in a test case will not exceed 3000.

Sample


Input
 

Output
 
2
5
3
1 1 1
2 1 0 2 0
1 5 0
1
2
1 1 0
1 1 1
Case #1: 1 0 0 0 0
Case #2: IMPOSSIBLE

In the first case, you must make flavor #1 malted, to satisfy the first customer. Every other flavor can be unmalted. The second customer is satisfied by getting flavor #2 unmalted, and the third customer is satisfied by getting flavor #5 unmalted.

In the second case, there is only one flavor. One of your customers wants it malted and one wants it unmalted. You cannot satisfy them both.

Analysis
On the surface, this problem appears to require solving the classic problem "Satisfiability," the canonical example of an NP-complete problem. The customers represent clauses, the milkshake flavors represent variables, and malted and unmalted flavors represent whether the variable is negated.

We are not evil enough to have chosen a problem that hard! The restriction that makes this problem easier is that the customers can only like at most one malted flavor (or equivalently, the clauses can only have at most one negated variable.)

Using the following steps, we can quickly find whether a solution exists, and if so, what the solution is.

  1. Start with every flavor unmalted and consider the customers one by one.
  2. If there is an unsatisfied customer who only likes unmalted flavors, and all those flavors have been made malted, then no solution is possible.
  3. If there is an unsatisfied customer who has one favorite malted flavor, then we must make that flavor malted. We do this, then go back to step 2.
  4. If there are no unsatisfied customers, then we already have a valid solution and can leave the remaining flavors unmalted.

Notice that whenever we made a flavor malted, we were forced to do so. Therefore, the solution we got must have the minimum possible number of malted flavors.

With clever data structures, the above algorithm can be implemented to run in linear time.

More information:

The Satisfiability problem - Horn clauses


Source Code
#include <iostream>

using namespace std;

#define Rep(i,n) for (int i(0),_n(n); i<_n; ++i)

struct Flavor{
    
int X;
    
char Y;
}
;

struct Customer{
    
int T;
    Flavor
* F;
    Customer() 
{
        F 
= NULL;
    }

    
~Customer() {
        
if(NULL!=F) {
            delete[] F;
            F 
= NULL;
        }

    }

    
void Init(int t) {
        T 
= t;
        F 
= new Flavor[T];
    }

    
void SetFlavor(int i, int X, int Y) {
        F[i].X 
= X;
        F[i].Y 
= Y;
    }

    
int GetFlavorX(int i) {
        
return F[i].X;
    }

    
int GetFlavorY(int i) {
        
return F[i].Y;
    }

    
bool IsSatisfied() {
        
return T==0;
    }

    
void Satisfy() {
        T
=0;
        
if(NULL!=F) {
            delete[] F;
            F 
= NULL;
        }

    }

    
bool IsSatisfing(int i, int *f) {
        
return f[F[i].X]==F[i].Y;
    }

    
void SetMalted(int i, int *f) {
        f[F[i].X] 
= 1;
    }

}
;

int main()
{
    
int C;
    FILE 
*fp = fopen("A.out""w");
    scanf(
"%d"&C);
    Rep(c, C) 
{
        
int N;
        scanf(
"%d"&N);
        
int* f = new int[N+1];
        Rep(i ,N
+1{
            f[i]
=0;
        }

        
int M;
        scanf(
"%d"&M);
        Customer
* customer = new Customer[M];
        Rep(m, M) 
{
            
int T;
            scanf(
"%d"&T);
            customer[m].Init(T);
            Rep(t, T) 
{
                
int X, Y;
                scanf(
"%d%d"&X,&Y);
                customer[m].SetFlavor(t,X,Y);
            }

        }

        
bool findSolution = true;
        
int m = 0;
        
while(m<M) {
            
if(customer[m].IsSatisfied()) {
                m
++;
                
continue;
            }

            
bool malted = false;
            
int idx;
            
bool satisfied = false;
            Rep(t, customer[m].T) 
{
                
if(customer[m].GetFlavorY(t)==1{
                    malted 
= true;
                    idx 
= t;
                }

                
if(customer[m].IsSatisfing(t,f)) {
                    satisfied 
= true;
                }

            }

            
if(!satisfied) {
                
if(malted) {
                    customer[m].SetMalted(idx,f);
                    customer[m].Satisfy();
                    m
=0;
                }
 else {
                    findSolution 
= false;
                    
break;
                }

            }
 else {
                m
++;
            }

        }

        fprintf(fp,
"Case #%d: ", c+1);
        
if(findSolution) {
            Rep(i ,N) 
{
                fprintf(fp,
"%d ", f[i+1]);
            }

            fprintf(fp,
"\n");
        }
 else {
            fprintf(fp,
"IMPOSSIBLE\n");
        }

        delete[] customer;
        delete[] f;

    }

    fclose(fp);
}

posted on 2009-08-12 11:12 Chauncey 閱讀(248) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿

隨筆檔案(4)

文章檔案(3)

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久激情五月婷婷| 欧美一级播放| 一色屋精品视频在线观看网站| 亚洲电影免费| 国产精品一区二区a| 亚洲黄色av一区| 精品999在线观看| 亚洲——在线| 在线一区亚洲| 欧美精品亚洲精品| 欧美国产先锋| 亚洲高清毛片| 久久福利资源站| 久久av在线看| 国产欧美一区二区视频| 一区二区三区精密机械公司 | 午夜精品亚洲| 国产精品成人一区二区艾草| 亚洲精品乱码| 夜夜爽av福利精品导航| 欧美国产精品久久| 欧美国产亚洲精品久久久8v| 亚洲国产精品嫩草影院| 久久夜色精品国产亚洲aⅴ| 久久久综合网| 悠悠资源网亚洲青| 久久香蕉国产线看观看av| 麻豆成人在线| 亚洲黄色免费电影| 欧美大片免费观看| 亚洲美女尤物影院| 亚洲午夜av电影| 国产精品影音先锋| 欧美一区二区三区视频在线 | 欧美一区在线看| 国产精品裸体一区二区三区| 亚洲一区二区三区乱码aⅴ| 欧美亚洲一级片| 国产一区二区精品| 久久综合狠狠综合久久综合88| 免费成人在线观看视频| 亚洲欧洲一区二区三区| 欧美精品亚洲| 亚洲男人的天堂在线| 久久国产精彩视频| 在线日韩av片| 欧美日韩a区| 香蕉成人久久| 欧美成人精品激情在线观看| 99视频有精品| 国产视频不卡| 欧美成人免费网| 国产精品99久久久久久久女警| 久久成人国产| 亚洲三级国产| 国产精品夜夜嗨| 老鸭窝亚洲一区二区三区| 99国产精品一区| 久久免费视频一区| 99精品国产在热久久下载| 国产精品亚洲成人| 免费观看成人www动漫视频| 亚洲无线一线二线三线区别av| 蜜臀99久久精品久久久久久软件| 一区二区三区欧美亚洲| 国产偷自视频区视频一区二区| 免费观看久久久4p| 亚洲自拍偷拍一区| 欧美电影在线观看完整版| 亚洲欧美日韩久久精品 | 国产精品一区久久久| 久久亚洲综合色| 亚洲已满18点击进入久久| 欧美福利电影网| 久久国产精品网站| 日韩视频一区二区三区| 狠狠色狠狠色综合日日小说| 欧美色123| 麻豆av一区二区三区久久| 亚洲欧美日本伦理| 亚洲理伦在线| 欧美国产亚洲视频| 久久午夜精品一区二区| 午夜精品一区二区三区在线| 99精品国产高清一区二区| 在线精品视频在线观看高清| 国产伦精品一区二区三区视频孕妇| 欧美精品1区| 美女视频网站黄色亚洲| 久久久999成人| 午夜日韩视频| 中文久久乱码一区二区| 亚洲精品一二三| 91久久亚洲| 91久久久久久久久久久久久| 欧美本精品男人aⅴ天堂| 久久综合五月| 久久国产精品99久久久久久老狼 | 一本大道久久a久久精二百| 欧美激情黄色片| 麻豆成人91精品二区三区| 久久久在线视频| 久久婷婷人人澡人人喊人人爽| 久久国产精品一区二区三区四区| 午夜亚洲影视| 午夜天堂精品久久久久| 午夜欧美不卡精品aaaaa| 亚洲伊人伊色伊影伊综合网| 亚洲一区3d动漫同人无遮挡| 亚洲天堂第二页| 亚洲欧美日韩精品久久亚洲区| 亚洲专区一区二区三区| 午夜精品在线观看| 欧美一区二区在线免费观看| 久久精彩视频| 老司机免费视频一区二区三区| 麻豆精品精华液| 亚洲电影免费观看高清完整版在线| 欧美激情精品久久久六区热门 | 亚洲欧美韩国| 欧美主播一区二区三区美女 久久精品人 | 亚洲大胆视频| 亚洲三级性片| 中文在线资源观看视频网站免费不卡| 在线中文字幕一区| 亚洲私人黄色宅男| 亚洲一区在线观看视频| 久久国产日本精品| 嫩草国产精品入口| 国产精品theporn| 国产小视频国产精品| 亚洲国产精品免费| 亚洲五月六月| 久久天天躁夜夜躁狠狠躁2022| 另类酷文…触手系列精品集v1小说| 亚洲电影中文字幕| 亚洲免费不卡| 欧美一区二区三区成人| 免费毛片一区二区三区久久久| 欧美精品在线看| 国产日产精品一区二区三区四区的观看方式| 国产亚洲欧美激情| 亚洲国产小视频| 午夜精品久久久久久久蜜桃app| 久久午夜影视| 亚洲美女在线看| 久久精品国产91精品亚洲| 欧美日韩一区二区三| 国产一区在线播放| 99视频热这里只有精品免费| 久久不见久久见免费视频1| 欧美福利视频一区| 亚洲欧美日韩一区在线观看| 欧美14一18处毛片| 国产拍揄自揄精品视频麻豆| 亚洲日本va午夜在线影院| 欧美亚洲一区在线| 亚洲精品一区二区三区99| 午夜精品久久久久影视| 欧美区一区二| 1769国产精品| 久久gogo国模裸体人体| 日韩亚洲综合在线| 美女国产精品| 好看的日韩av电影| 亚洲男人的天堂在线| 91久久久久久久久| 久久久人成影片一区二区三区 | 欧美三区在线视频| 亚洲国产另类久久久精品极度| 久久精品国产91精品亚洲| 一区二区三区高清在线| 欧美成年人视频| 亚洲国产99精品国自产| 久久九九国产精品| 亚洲综合色自拍一区| 欧美午夜精品一区| 日韩视频国产视频| 亚洲高清在线观看一区| 久久精品人人做人人爽| 国产伦精品一区二区三区免费迷 | 亚洲高清不卡在线观看| 欧美在线999| 国产视频一区二区在线观看| 亚洲欧美日韩另类| 亚洲视频免费看| 国产精品swag| 亚洲影院在线观看| 99精品国产一区二区青青牛奶| 欧美精品在线一区二区| 999亚洲国产精| 91久久国产综合久久蜜月精品| 欧美韩日精品| 一区二区高清在线观看| 夜夜精品视频一区二区| 国产精品成人观看视频免费| 一本大道av伊人久久综合| 日韩午夜剧场| 国产精品一区二区久久久久| 欧美一区二区视频在线|