Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- char mm[82][31];
- int mi[82][82],mp[10][10];
- int n,c,nrmed,m,Min=9000;
- int x[10];
- int Pret(char *p)
- {
- int x=0;
- while(*p)
- {
- x=x*10+(*p-'0');
- p++;
- }
- return x;
- }
- void Act_MM_MP(char s[],int i)
- {
- int k=0;
- char sep[]=": ,";
- char *p=strtok(s,sep);
- p=strtok(NULL,sep);
- while(p)
- {
- nrmed++;
- strcpy(mm[nrmed],p);
- p=strtok(NULL,sep);
- k++;
- mp[i][k]=Pret(p);
- p=strtok(NULL,sep);
- }
- mp[i][0]=k;
- }
- int Cautare(char *p)
- {
- for(int i=1;i<=nrmed;i++)
- if(!strcmp(p,mm[i]))
- return i;
- }
- void Act_MI(char s[])
- {
- int m1,m2;
- char *p=strtok(s,"/");
- m1=Cautare(p);
- p=strtok(NULL,"/");
- m2=Cautare(p);
- mi[m1][m2]=mi[m2][m1]=1;
- }
- void Citire()
- {
- char s[701];
- ifstream f("farma.in");
- f>>c>>n;
- for(int i=1;i<=n;i++)
- {
- f.get();
- f.get(s,701);
- Act_MM_MP(s,i);
- }
- f>>m;
- for(int i=1;i<=m;i++)
- {
- f.get();
- f.get(s,100);
- Act_MI(s);
- }
- f.close();
- }
- int Valid(int k)
- {
- int s1=0,s=0,i,j;
- for(i=1;i<k;i++)
- s1+=mp[i][0];
- s1+=x[k];
- for(i=1;i<k;i++)
- {
- s=0;
- for(j=1;j<i;j++)
- s+=mp[i][0];
- s+=x[i];
- if(mi[s1][s])
- return 0;
- }
- return 1;
- }
- void Act_Min(int k)
- {
- int s=0;
- for(int i=1;i<=k;i++)
- s+=mp[i][x[i]];
- if(s<Min)
- Min=s;
- }
- void Bk(int k)
- {
- int i;
- for(i=1;i<=mp[k][0];i++)
- {
- x[k]=i;
- if(Valid(k))
- if(k==n) Act_Min(k);
- else Bk(k+1);
- }
- }
- void Afis1()
- {
- for(int i=1;i<=n;i++)
- cout<<mp[i][0]<<"\n";
- }
- void Afis2()
- {
- cout<<Min;
- }
- int main()
- {
- Citire();
- Bk(1);
- if(c==1) Afis1();
- else Afis2();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement